问题描述
我有一个自定义的 ThreadPoolTaskScheduler,我想在我在配置中定义的 LockableTaskScheduler 实例中使用它,如下所示:
@Configuration
public class ApplicationConfiguration {
@Autowired DataSource dataSource;
@Bean
public LockProvider lockProvider() {
return new JdbcTemplateLockProvider(
JdbcTemplateLockProvider.Configuration.builder()
.withJdbcTemplate(new JdbcTemplate(dataSource))
.usingDbTime()
.build()
);
}
@Bean
public TaskScheduler lockableTaskScheduler(){
ThreadPoolTaskScheduler threadPoolTaskScheduler = new
ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(2);
threadPoolTaskScheduler.initialize();
return new LockableTaskScheduler(threadPoolTaskScheduler,lockManager());
}
@Bean
public LockManager lockManager(){
return new DefaultLockManager(lockProvider(),lockConfigurationExtractor());
}
@Bean /*** PROBLEM HERE ***/
public LockConfigurationExtractor lockConfigurationExtractor(){
return new SpringLockConfigurationExtractor();
}
}
我以编程方式实例化动态计划,如下所示:
@Autowired
TaskScheduler lockableTaskScheduler;
...
CronTrigger cronTrigger = new CronTrigger(cronExpression,TimeZone.getTimeZone(TimeZone.getDefault().getID()));
Runnable runnable = () -> someMethod();
ScheduledFuture<?> scheduledTask = lockableTaskScheduler.schedule(runnable,cronTrigger);
但我找不到任何 LockConfigurationExtractor
的公共实现来创建 LockConfigurationExtractor
bean。
附言我浏览了源代码和测试用例。但是 LockConfigurationExtractor
似乎没有在库包之外可访问的公共具体实现。
还有其他方法可以定义/获取 DefaultLockManager
bean 吗?
编辑:
实际上我的主要目标根本不是创建 LockableTaskScheduler。我只是想以某种方式安排一个“可锁定”运行:
ScheduledFuture<?> scheduledTask = lockableTaskScheduler.schedule(<lockable_runnable>,cronTrigger);
所以当 runnable 被触发时,它不能同时在另一个节点中运行。 (注意:业务逻辑的动态/程序化调度部分是无法避免的ATM)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)