[英]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. @EnableScheduling
的Javadoc在该领域非常详尽。
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.