Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将两个不同的TaskScheduler绑定到Spring引导应用程序_Java_Spring_Scheduled Tasks_Scheduling - Fatal编程技术网

Java 将两个不同的TaskScheduler绑定到Spring引导应用程序

Java 将两个不同的TaskScheduler绑定到Spring引导应用程序,java,spring,scheduled-tasks,scheduling,Java,Spring,Scheduled Tasks,Scheduling,我有以下问题:在定义cron作业的应用程序中,我有多个@Scheduled注释,这些注释可能同时运行。据我所知,标准行为是每个cron作业由一个单线程TaskScheduler执行,因此一次只能运行一个cron作业,而所有其他作业都排队。这将是我想要的行为,但我的经验是,作业并行运行 经过大量搜索,我发现healthcheck的底层类定义了一个具有多个线程的TaskScheduler 知道了这一点,我想使用healthcheck库的多线程TaskScheduler,并定义另一个TaskSched

我有以下问题:在定义cron作业的应用程序中,我有多个
@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
    上调度任务。