我正在尝试安排一个方法调用。我想在服务器启动后立即调度此方法调用,然后在每30秒后调用一次。春季调度固定延迟和初始延迟的作业
下面的代码:
@Configuration
@EnableScheduling
@EnableTransactionManagement
public class Schedular implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.setScheduler(poolScheduler());
taskRegistrar.addTriggerTask(new Runnable() {
@Override
public void run() {
testScheduling();
}
}, new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
Calendar nextExecutionTime = Calendar.getInstance();
nextExecutionTime.add(Calendar.SECOND, <some value from database>);
return nextExecutionTime.getTime();
}
});
}
@Bean
public TaskScheduler poolScheduler() {
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
scheduler.setThreadNamePrefix("poolScheduler");
scheduler.setPoolSize(10);
return scheduler;
}
public void testScheduling(){
System.out.println("Scheduling Testing");
}
}
30秒后,下面的代码调度方法的代码在服务器启动,但服务器启动不只是后后。我知道我需要做一些其他的配置来安排方法调用服务器启动后,然后每隔30秒(或任何我想要的时间)。
我正在使用弹簧引导。任何人都可以请建议。
另外,是否有可能从数据库中获得初始和固定延迟/固定比率值。我想从数据库中设置初始值
在此先感谢。
为什么不使用'@Scheduled(initialDelay = 30000,fixedRate = 30000)'?. –
道歉我的错误,我应该提到,延迟值是从数据库中提取的,所以它不是常数值。我已经更新了这个问题。 – Manglesh
然后,只需创建一个'PropertySource'实例,该实例从数据库读取数据并使用'initialDelayString'和'fixedRateString'来使用表达式。 –