2016-12-07 36 views
2

如何告诉我的春天计划的方法使用特定的执行程序来运行?使用spring @scheduled与特定的执行者

例如,这是我的春天调度方法之一,

@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执行器运行?

回答

3

Javadoc of @EnableScheduling在这方面非常详尽。

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

+0

你能更具体?我找不到指示如何在独立执行程序上运行'@ Scheduled'方法的文档中的任何内容。恐怕这是不可能的(还),因为@Gaurav指出 – sevteen

+0

我的回答似乎并没有回答你的问题。如果您希望能够按计划方法微调执行程序,目前无法执行此操作,但是[我们的跟踪程序]存在问题(https://jira.spring.io/browse/SPR-14218)。我的答案是关于定制所有调度方法使用的执行程序。 –

1
@Configuration 
@EnableScheduling 
public class AppConfig implements SchedulingConfigurer { 

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

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


}