gpt4 book ai didi

java - Spring批处理仅限制单个作业实例

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:41:50 24 4
gpt4 key购买 nike

我有一个可以被 rest URL 踢掉的 spring batch 作业。我想确保只允许运行一个作业实例。如果另一个实例已经在运行,则不要启动另一个实例。即使参数不同。

我进行了搜索,但没有发现开箱即用的解决方案。考虑扩展 SimpleJobLauncher。检查作业的任何实例是否正在运行。

最佳答案

你可以试试 intercept the job execution , 实现 JobExecutionListener 接口(interface):

public class MyJobExecutionListener extends JobExecutionListener {

//active JobExecution, used as a lock.
private JobExecution _active;

public void beforeJob(JobExecution jobExecution) {
//create a lock
synchronized(jobExecution) {
if(_active!=null && _active.isRunning()) {
jobExecution.stop();
} else {
_active=jobExecution;
}
}
}

public void afterJob(JobExecution jobExecution) {
//release the lock
synchronized(jobExecution) {
if(jobExecution==_active) {
_active=null;
}
}
}
}

然后,注入(inject)作业定义:

<job id="myJobConfig">
<listeners>
<listener ref="myListener"/>
</listeners>
</job>

关于java - Spring批处理仅限制单个作业实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23193779/

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