gpt4 book ai didi

java - Spring Task Executor 在上一个任务完成之前不会触发

转载 作者:行者123 更新时间:2023-11-29 09:30:40 26 4
gpt4 key购买 nike

我在一个带有@Scheduled 注释的类中有一个方法

@Scheduled(cron = "* * * * * *")
public void doSomething() {

}

这应该每秒执行一次(假设 cron 语句是正确的)。

我将 sping 配置设置为

<task:scheduler id="taskScheduler" pool-size="2" />
<task:executor id="taskExecutor" pool-size="2" />
<task:annotation-driven executor="taskExecutor" scheduler="taskScheduler" />

问题是在最后一次执行完成之前,该方法不会再次触发。我期待看到它触发两次(并可能开始在某处填满作业队列)。

我怎样才能消除方法调用之间的依赖性,但仍然确保一次只有 2 个进程在运行。

最佳答案

似乎一个想法是将实际工作传递给 taskExecutor

@Scheduled(cron = "* * * * * *")
public void doSomething() {
this.executor.execute(new Runnable() {...}
}

然后将拒绝策略添加为 *CALLER_RUNS*

<task:scheduler id="taskScheduler" pool-size="1" />
<task:executor id="taskExecutor" pool-size="1"
queue-capacity="1" rejection-policy="CALLER_RUNS" />
<task:annotation-driven executor="taskExecutor"
scheduler="taskScheduler" />

因此,上述工作始终由一个线程池完成。

不确定这是否是您的最佳方式。

关于java - Spring Task Executor 在上一个任务完成之前不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15028548/

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