简体   繁体   English

将 Spring 的 @Scheduled 注释与特定的执行程序一起使用

[英]Using Spring's @Scheduled annotation with a specific executor

How do I tell my Spring scheduled method to run using a specific executor?如何告诉我的 Spring 计划方法使用特定的执行程序运行?

For example, this is one of my spring scheduler method,例如,这是我的 spring 调度程序方法之一,

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

And here are the 2 executors defined in my Java config:这是我的 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;
}

When the scheduled method is running I can see it is using taskScheduler executor.当计划的方法运行时,我可以看到它正在使用taskScheduler执行程序。 How to tell it to run using newTaskScheduler executor?如何告诉它使用newTaskScheduler执行器运行?

The Javadoc of @EnableScheduling is pretty exhaustive in that area. @EnableSchedulingJavadoc在该领域非常详尽。

You need to implement a SchedulingConfigurer to fine-tune which Executor needs to be used.您需要实现一个SchedulingConfigurer来微调需要使用哪个Executor

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


}

Executor qualification with @Scheduled is not supported yet.尚不支持 @Scheduled 的执行者资格。

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

How do I tell my Spring scheduled method to run using a specific executor?如何告诉我的Spring调度方法使用特定的执行程序运行?

For example, this is one of my spring scheduler method,例如,这是我的Spring Scheduler方法之一,

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

And here are the 2 executors defined in my Java config:这是我的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;
}

When the scheduled method is running I can see it is using taskScheduler executor.当计划的方法运行时,我可以看到它正在使用taskScheduler执行程序。 How to tell it to run using newTaskScheduler executor?如何告诉它使用newTaskScheduler执行程序运行?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM