gpt4 book ai didi

Java Spring : how to run two different cronjobs simultaneously?

转载 作者:行者123 更新时间:2023-11-29 04:15:11 25 4
gpt4 key购买 nike

首先,很抱歉,如果之前有人问过这个问题,我找不到类似的问题,所以我决定自己问。

假设我有两个不同的 cron 作业:

@Scheduled(cron = "0 30 * * * *")
private void sleepForDays() {
while(true) sleep();
}

@Scheduled(cron= "0 * * * * *")
private void logHello() {
log("hello!");
}

我有一个运行数天的函数,每 30 分钟触发一次。 (0 30 * * * *) 我们将其命名为 sleepForDays()

我有另一个函数,它应该每分钟记录一次问候。让我们将其命名为 logHello()

问题:

  1. 一旦 sleepForDays() 开始,我相信第二个 sleepForDays() 不会开始,直到第一个完成。对吧?

  2. sleepForDays() 启动后,logHello() 并非每分钟都在工作。我在我的生产环境中登录了这个函数,但我在输出文件中看不到这些日志。显然,当 sleepForDays() 正在执行时它不起作用。

意图:

  1. 我希望不同的 cronJobs 彼此独立运行。换句话说,我不希望 sleepForDays() 阻塞 logHello()

  2. 我还想避免重复执行同一个 cronJob。如果 sleepForDays() 已经在执行,我不希望第二个 sleepForDays() 开始。

我发布此问题的主要观点是问题 #2。关于 StackOverflow 中的类似帖子,我相信问题 #1 的答案是肯定的。我想确保我在问题 #1 中的假设是正确的。

感谢您的宝贵时间!

编辑:

问题可能与我使用默认参数初始化 TaskScheduler bean 有关。默认情况下,TaskScheduler 不支持计划的 cronjobs 的多线程。如果我使用多线程支持初始化 TaskScheduled bean,我的问题 #1 的答案是否仍然是肯定的?

Bean初始化如下:

@Bean
public static TaskScheduler taskScheduler() {
return new ConcurrentTaskScheduler();
}

编辑 2:解决方案

非常感谢贡献者,我设法使用下面的 bean 初始化并发运行这些函数。我只是用这个替换了 TaskScheduler bean:

@Bean
public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(2);
threadPoolTaskScheduler.setThreadNamePrefix("ThreadPoolTaskScheduler"); // i dont know what it does, i used it anyways lol
return threadPoolTaskScheduler;
}

最佳答案

默认情况下,所有@Scheduled 方法共享一个线程。例如,您可以通过定义自定义 ThreadPoolTaskScheduler 来修改此行为。 bean :

@Bean
public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(5);
threadPoolTaskScheduler.setThreadNamePrefix("ThreadPoolTaskScheduler");
return threadPoolTaskScheduler;
}

关于Java Spring : how to run two different cronjobs simultaneously?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52888401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com