将spring @scheduled与特定执行程序一起使用

时间:2016-12-07 12:54:22

标签: java spring spring-boot quartz-scheduler

如何告诉我使用特定执行程序运行的spring预定方法?

例如,这是我的spring调度程序方法之一

@Scheduled(fixedRate=1000)
public void scheduleJobs(){
    doThese();
}

以下是我在java配置中定义的2个执行程序

@Bean
public Executor taskScheduler() {
    ThreadPoolTaskScheduler t = new ThreadPoolTaskScheduler();
    t.setPoolSize(2);
    t.setThreadNamePrefix("taskScheduler - ");
    t.initialize();
    return t;
}

@Bean
public Executor newTaskScheduler() {
    ThreadPoolTaskScheduler t = new ThreadPoolTaskScheduler();
    t.setPoolSize(2);
    t.setThreadNamePrefix("newTaskScheduler - ");
    t.initialize();
    return t;
}

当预定方法运行时,我可以看到它正在使用taskScheduler执行器。如何告诉它使用newTaskScheduler执行器运行?

4 个答案:

答案 0 :(得分:5)

Javadoc of @EnableScheduling在该领域非常详尽。

您需要实施SchedulingConfigurer来微调哪些Executor需要使用。

答案 1 :(得分:3)

@Configuration
@EnableScheduling
public class AppConfig implements SchedulingConfigurer {

 @Override
 public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
  taskRegistrar.setScheduler(taskScheduler());
 }

 @Bean
 public Executor taskScheduler() {
  ThreadPoolTaskScheduler t = new ThreadPoolTaskScheduler();
  t.setPoolSize(2);
  t.setThreadNamePrefix("taskScheduler - ");
  t.initialize();
  return t;
 }


}

答案 2 :(得分:3)

目前尚不支持@Scheduled的执行者资格。

参考 - https://jira.spring.io/browse/SPR-14218

答案 3 :(得分:0)

以下简单的代码似乎可以提供所需的功能

VPD

基于this指南