Shedlock : LockableTaskScheduler 没有锁定我的任务

问题描述

我正在使用调度程序和带有弹簧和注释的 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...