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

Dri*_*pto 4 java spring quartz-scheduler spring-boot

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

例如,这是我的弹簧调度方法之一,

@Scheduled(fixedRate=1000)
public void scheduleJobs(){
    doThese();
}
Run Code Online (Sandbox Code Playgroud)

这里是我的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;
}
Run Code Online (Sandbox Code Playgroud)

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

kuh*_*yan 8

@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;
 }


}
Run Code Online (Sandbox Code Playgroud)


Ste*_*oll 5

的的Javadoc@EnableScheduling是在这方面相当详尽.

您需要实现一个SchedulingConfigurer微调哪些Executor需要使用.

  • 你可以说得更详细点吗?我在文档中找不到任何指示如何在单独的执行器上运行“@Scheduled”方法的内容。正如@Gaurav 指出的那样,恐怕(目前)还不可能 (2认同)
  • 上面评论中的问题已作为重复项关闭。有效且开放的票证现已发布:https://github.com/spring-projects/spring-framework/issues/20818 (2认同)

Gau*_*pta 5

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

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

  • 该问题作为重复问题被关闭。开放票现在是:https://github.com/spring-projects/spring-framework/issues/20818 (2认同)