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