Spring batch 调度程序春季启动

Spring batch 调度程序春季启动,spring-batch,Spring Batch,我的要求是在集群环境中只在一个实例上运行单个调度程序。为此,我使用了shedlock,但问题是,在服务器启动时,我得到了以下异常,“java.lang.ClassCastException:net.javacramps.shedlock.spring.SpringLockableTaskSchedulerFactoryBean无法强制转换为org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler” 在这方面请帮助我。您可以

我的要求是在集群环境中只在一个实例上运行单个调度程序。为此,我使用了shedlock,但问题是,在服务器启动时,我得到了以下异常,“java.lang.ClassCastException:net.javacramps.shedlock.spring.SpringLockableTaskSchedulerFactoryBean无法强制转换为org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler”


在这方面请帮助我。

您可以轻松地使用。只需执行以下操作并将注册器添加到xml配置中

Java代码

@Bean
public LockProvider lockProvider(DataSource dataSource) {
    return new JdbcTemplateLockProvider(dataSource);
}


@Bean
public ScheduledLockConfiguration taskScheduler(LockProvider lockProvider) {
    return ScheduledLockConfigurationBuilder
        .withLockProvider(lockProvider)
        .withPoolSize(10)
        .withDefaultLockAtMostFor(Duration.ofMinutes(10))
        .build();
}
XML配置

@TryLock(name = "doSomeWork", owner = "serviceA", lockFor = ONE_MINUTE)
public void doSomeWork() {
  //...
}

在ShedLock 2.0.1版中,您不应该遇到这样的问题
<!-- A bean for the lock implementation. Note that there should be only one global implementation-->
<bean id="postgresLock" class="com.yusufaytas.dlock.jdbc.PostgresIntervalLock">
  <constructor-arg type="javax.sql.DataSource" ref="lockDataSource"/>
</bean>
<!-- The lock gets auto-registered to the registrar -->
<bean id="lockRegistrar" class="com.yusufaytas.dlock.spring.IntervalLockRegistrar"/>