我想要一个每10秒运行一次的春季计划任务,但是由于某种原因,该任务只运行一次,并且再也不会重复。
请不要建议我使用其他类型的任务,因为我特别需要使用spring任务。
@Scheduled(fixedRate = 10000, initialDelay = 1000)
public void myTask() {
...
}
在我的主配置类我有@EnableScheduling
添加以及。
调度是在特定时间段内执行任务的过程,但是您希望使其异步,因此将会有一些更改
创建一个配置类来管理Async
操作,以便您使用ThreadPoolTaskExecutor
:
@EnableScheduling
@Configuration
public class TaskConfig implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar)
{
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(10);
threadPoolTaskScheduler.setThreadNamePrefix("your-scheduler-");
threadPoolTaskScheduler.initialize();
scheduledTaskRegistrar.setTaskScheduler(threadPoolTaskScheduler);
}
}
,那么您可以像下面这样异步运行作业:
@Component
public class HelloSender {
@Scheduled(fixedRate = 10000)
public void myTask() {
System.out.println("im running asynchronous with Worker : " + Thread.currentThread().getName());
}
}
有关ThreadPoolTaskExecutor
的更多信息,请查看这里:https://docs.spring.io/spring-framework/docs/3.0.x/spring-framework-reference/html/scheduling.html