当前位置: 首页 > 知识库问答 >
问题:

Spring@Scheduled-并发运行

锺离良哲
2023-03-14

我有一个Spring Boot2.1.6.Release应用程序,其中我有一个用

@Scheduled(cron = "*/10 * * * * *}
spring.task.scheduling.pool.size=10

但它似乎没有工作,因为它仍然在等待一个执行结束,然后再开始下一个。

在@scheduled注释中使用cron进行并行执行的正确方法是什么?

共有1个答案

章丰茂
2023-03-14

诚然,任务计划程序的默认池大小为1,但增加此池大小只会使更多线程可用于其他@schedule方法。预期的行为不是方法并行运行,否则线程可能会耗尽。

如果您希望改变这种行为以允许相同的方法并行运行,则需要使用@enableasync@async注释。您可能还希望更改任务执行器的池大小。话虽如此,但请记住,您仍然可能会耗尽您的线程,因此要非常小心地改变这种预期的行为。

 类似资料:
  • 我使用的是Spring的@计划和@异步注释。 我的目的 计划一个同步方法——它运行一个for循环,而这个循环将运行一个异步方法,因此循环中的下一个值不需要等到方法完成。 见下面我的代码: 问题: 我的异步方法不会在不同的任务上运行。只有在我将@Async注释也放在我的计划方法上时,它才起作用。但我的计划方法将异步运行到,这不是我想要的。计划的方法需要同步运行,但for循环中被调用的方法需要异步运行

  • 问题内容: Spring提供了使用注释按特定间隔计划和执行任务的可能性,例如 @Scheduled 有一种方便的方法来对该行为进行单元测试吗? 当然,我可以自己调用bean的方法,但是我想确保不会因配置错误等而遇到诸如多次执行之类的问题。 其他框架提供了自己快进时间的可能性。Activiti就是一个例子,你可以在其中致电 加快框架使用的时间。 春天有什么可比的吗? 本质上,我想做的是在单元测试(使

  • 我正在使用一个属性PlaceholderConfigrer在Spring调度注释配置中获取java属性 当没有定义覆盖属性值时,有没有办法指定默认值? Spring 3支持${my.property: defaultValue}语法,但注释上不允许,我试图传递变量,但也不允许,注释属性Scheduled.cron的值必须是常量表达式

  • 问题内容: 我正在编写一个具有cron作业的应用程序,该作业每60秒执行一次。该应用程序被配置为在需要时扩展到多个实例。我只想每60秒(在任何节点上)在1个实例上执行任务。开箱即用,我找不到解决方案,但令我惊讶的是,之前没有多次被问到。我正在使用Spring 4.1.6。 问题答案: 批处理和计划的作业通常在自己的独立服务器上运行,而不是面向客户的应用程序,因此将作业包含在预期在群集中运行的应用程

  • 问题内容: 我需要以固定的间隔运行批处理作业,并且能够在运行时更改此批处理作业的时间。为此,我遇到了Spring框架下提供的@Scheduled注释。但是我不确定如何在运行时更改fixedDelay的值。我进行了一些谷歌搜索,但没有发现任何有用的信息。 问题答案: 在spring启动中,你可以直接使用应用程序属性! 例如: 请注意,如果未定义属性,你还可以具有默认值,例如,默认值为“ 60”(秒)

  • 我有一个spring boot应用程序,我想有多个方法运行在一天的不同时间。第一个方法运行,但没有后续方法运行。我需要做什么来解决这个问题?这里是我的代码:@enableScheduling@configuration//@conditionalonproperty(name=“spring.enable.scheduling”)@springbootapplication@propertysou