如何确保作业在运行时,不允许同时再次运行?
我们有一个BJ,它需要1个小时来处理提要和填充临时表。这个BJ的第一步是清除临时表并开始从Main store前表填充数据。
考虑一个场景,当BJ启动时(第一次运行),如果我们再次启动BJ,作为第一步的一部分,它将从临时表中删除内容。
那么,请建议我如何在第一次执行之前保留第二次执行?
也许我误解了你的问题,但是你可以通过在一个步骤中的Tasklet上指定一个thrott-limited
来限制任何一个步骤的并行执行次数。指定一个应该确保你一次只有一个执行:
<batch:step id="stepA" next="stepB">
<batch:tasklet throttle-limit="1">
<batch:chunk reader="myReader" writer="myWriter" commit-interval="100"/>
</batch:tasklet>
</batch:step>
我相信,这不会是最好的解决方案,但我希望这仍然符合您的情况。
执行作业时,请确保始终使用相同的参数运行作业。成功完成作业后,配置调用脚本以删除与该批处理作业执行相对应的条目。
这样,它将产生错误,并且不允许您同时运行同一作业的2次执行。删除将确保允许串行执行。
替代方法:使用单个参数job-ecution-id
编写作业。每次在执行作业之前,从作业的批处理表中查询已完成作业的job-ecution-id
的最大值。现在,使用job-ecution-id
作为输入参数递增1来执行作业。
我认为这是一个比上面更好的方法。我不确定springbatch本身是否提供了实现这种场景的简单方法。
您可以首先创建自定义的Tasklet,并在其中使用JobExecutionDao来查找所有的JobExecutions。如果有多个正在运行的,抛出一个异常。
假设我想在2020年2月6日13:50运行一次作业。我该怎么做? 通过使用下面的表达式,我可以得出它将在今天13:50运行。但它明年也会运行。但我希望它只运行一次。
我正在尝试使用Spring Batch和Spring Task Scheduler运行两个作业,而不考虑它们的调度时间。这两个作业(Tasklet)在不同的时间间隔执行不同的作业。 以下是springConfig。xml文件: 以下是CouPonTougleActivationScheduler和OTPJobScheduler的实现: @enableSched调度公有类CouPonTougleAc
问题内容: 我有几个使用共享资源(数据库)的作业,有时这会在(碰巧)同时触发作业的(罕见)事件中导致构建失败。 例如,给定作业A到E,是否有任何方法可以指定A和C 绝不能同时运行 ? 除上述资源外,构建彼此独立(例如,不存在上游/下游关系)。 “强力”方式将执行者的数量限制为一个,但是如果大多数作业可以很好地同时执行并且在构建服务器上不缺少计算资源,那么显然这不是理想的选择。 问题答案: 当前有两
我有一个工作,需要执行两次每天在不同的时间。例如10:00和15:30。我怎样才能做到这一点?
我正在用真正的ios设备在mac上测试我的应用程序。当我运行脚本时,它会在Eclipse IDE中显示以下错误:, org.openqa.selenium.无法创建新的远程会话。所需的功能=功能[{app=/用户//下载/XXX. ipa, platformVersion=10.2.1, platformName=iOS, deviceName=Mr. x'S iPod Touch, UDID=*
我看到过各种帖子描述JPA EntityGraph允许在运行时选择图表。我不完全清楚这指的是什么。 出于诚意和尊重,我想参考这篇有用的文章:https://www.baeldung.com/jpa-entity-graph.(大多数JPA用户可能已经看过了。) 文章引用- EntityGgraph允许对我们想要检索的相关持久性字段进行分组,并允许我们在运行时选择图形类型。 并在结论部分再次巩固上述