Java 将两个不同的TaskScheduler绑定到Spring引导应用程序
我有以下问题:在定义cron作业的应用程序中,我有多个Java 将两个不同的TaskScheduler绑定到Spring引导应用程序,java,spring,scheduled-tasks,scheduling,Java,Spring,Scheduled Tasks,Scheduling,我有以下问题:在定义cron作业的应用程序中,我有多个@Scheduled注释,这些注释可能同时运行。据我所知,标准行为是每个cron作业由一个单线程TaskScheduler执行,因此一次只能运行一个cron作业,而所有其他作业都排队。这将是我想要的行为,但我的经验是,作业并行运行 经过大量搜索,我发现healthcheck的底层类定义了一个具有多个线程的TaskScheduler 知道了这一点,我想使用healthcheck库的多线程TaskScheduler,并定义另一个TaskSched
@Scheduled
注释,这些注释可能同时运行。据我所知,标准行为是每个cron作业由一个单线程TaskScheduler
执行,因此一次只能运行一个cron作业,而所有其他作业都排队。这将是我想要的行为,但我的经验是,作业并行运行
经过大量搜索,我发现healthcheck的底层类定义了一个具有多个线程的TaskScheduler
知道了这一点,我想使用healthcheck库的多线程TaskScheduler
,并定义另一个TaskScheduler
,它是单线程的,由我的@Scheduled
注释使用
我可以定义一个使用单线程调度程序的Bean:
@Bean
公共ThreadPoolTaskScheduler ThreadPoolTaskScheduler(){
ThreadPoolTaskScheduler ThreadPoolTaskScheduler=新的ThreadPoolTaskScheduler();
setPoolSize(线程数);
返回threadPoolTaskScheduler;
}
但是,如何才能将此调度程序仅绑定到我的
@Scheduled
注释?可以简单地让用@Scheduled注释的方法调用用@Async注释的方法(“singleThreadScheduledExecutor”)。
“multipleThreadScheduledExecutor”可以与异步方法并行运行,并且当所属的cron作业在时间上重叠时,异步方法在LinkedBlockingQueue中排队。
另外两件事对于让它工作很重要:
这是nessecary,因此spring可以围绕这些方法构建代理 使用
@Scheduled
注释时,这似乎是不可能的。您可以在Java配置中定义任务,并自己在正确的TaskScheduler
上调度任务。