问题描述
我正在使用调度程序和带有弹簧和注释的 shedlock 机制来使用和管理我的作业。我有一个要求,需要更动态地完成我的任务。我将在 db 上配置我的作业并自动安排。我确实在 spring 中使用 taskScheduler 进行了管理,但不能使用 LockableTaskScheduler。我的要求是每个工作都有不同的 LockConfiguration。(我有多个节点)
通常我使用多节点,但出于测试目的,我在不同的类 post 构造上创建相同名称的作业,并观察它们是否会一起触发。但它不起作用。有人知道 LockableTaskScheduler 是如何工作的吗?我阅读了文档,但没有满意的例子。
public SchedulerManager(TaskScheduler taskScheduler,ApplicationContext applicationContext) {
this.taskScheduler = taskScheduler;
this.applicationContext = applicationContext;
}
@postconstruct
void load() {
LockProvider lockProvider = (LockProvider) applicationContext.getBean("lockProvider");
String name = "First Job!";
LockConfiguration lockConfiguration = new LockConfiguration(Instant.Now(),name,Duration.ofMinutes(1),Duration.ofMinutes(1));
LockConfigurationExtractor lockConfigurationExtractor = new DefaultLockConfigurationExtractor(lockConfiguration);
LockManager lockManager = new DefaultLockManager(lockProvider,lockConfigurationExtractor);
LockableTaskScheduler lockableTaskScheduler = new LockableTaskScheduler(taskScheduler,lockManager);
tasks.put(name,lockableTaskScheduler.schedule(() -> {
System.out.println("NAME IS : " + name);
},new crontrigger("20 * * * * *")));
String name2 = "Second Job!";
LockConfiguration lockConfiguration2 = new LockConfiguration(Instant.Now(),name2,Duration.ofMinutes(1));
LockConfigurationExtractor lockConfigurationExtractor2 = new DefaultLockConfigurationExtractor(lockConfiguration2);
LockManager lockManager2 = new DefaultLockManager(lockProvider,lockConfigurationExtractor2);
LockableTaskScheduler lockableTaskScheduler2 = new LockableTaskScheduler(taskScheduler,lockManager2);
tasks.put(name2,lockableTaskScheduler2.schedule(() -> {
System.out.println("NAME IS : " + name2);
},new crontrigger("30 * * * * *")));
}
配置
@Configuration
public class SchedulerConfiguration {
@Bean
public LockProvider lockProvider(DataSource dataSource) {
return new JdbcTemplateLockProvider(JdbcTemplateLockProvider.Configuration.builder().withLockedByValue("1").withTableName("XXER.SHEDLOCK").withJdbcTemplate(new JdbcTemplate(dataSource)).build());
}
@Bean
public LockProvider lockProvider2(DataSource dataSource) {
return new JdbcTemplateLockProvider(JdbcTemplateLockProvider.Configuration.builder().withLockedByValue("2").withTableName("XXER.SHEDLOCK").withJdbcTemplate(new JdbcTemplate(dataSource)).build());
}
@Bean
public ThreadPoolTaskScheduler taskScheduler(){
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(30);
threadPoolTaskScheduler.setThreadNamePrefix("ThreadPoolTaskScheduler");
return threadPoolTaskScheduler;
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)