首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当使用与spring一样的输入参数启动作业时,自由批处理不会抛出异常(JobInstanceAlreadyExistsException)

当使用与spring一样的输入参数启动作业时,自由批处理不会抛出异常(JobInstanceAlreadyExistsException)
EN

Stack Overflow用户
提问于 2019-01-04 17:01:02
回答 2查看 213关注 0票数 1

我正在自由服务器上的java 7中开发批处理作业。使用REST启动批处理作业。这里的问题是,当我试图为相同的输入参数启动批处理作业时,会创建新的作业实例。而春季批处理,抛出一个错误说JobInstanceAlreadyExistsException。我期望这样的东西可以避免为相同的输入参数创建新的作业。

输入参数和批处理状态已使用空闲服务器表(WLPJOBINSTANCE、WLPSTEPTHREADINSTANCE、input参数等)存储在Oracle数据库中。

代码语言:javascript
复制
<job xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/jobXML_1_0.xsd"
    id="my-batch-job" restartable="true" version="1.0">
</job>

如果传递相同的输入参数,作业应该抛出一个异常。它为相同的输入参数创建新的作业实例。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-08 20:55:43

使用空闲批处理REST API查看是否存在匹配的作业实例

我要给出一个完全不同的答案。另一个答案解释了为什么自由批处理,以及更一般的JSR 352规范,永远不会认为提交与早期作业参数相同的第二个作业是错误的。

但是,如果您真的想要防止这种情况,可以在自由批处理中使用REST在提交之前进行查询,如果匹配的作业实例已经存在的话。但是,此时将由您来中止/阻止作业提交。

假设我想匹配jobName of BonusPayout,使用作业参数parm1 of value 1000和作业参数parm2匹配500* (使用glob/通配符)。

我可以通过URL做这件事:

*

注意,在文档中还有其他各种选项,比如忽略大小写(或不忽略)。

因此,如果我得到一个匹配,我可以选择不继续提交工作(再次)。

票数 1
EN

Stack Overflow用户

发布于 2019-01-05 04:33:29

根据JSR 352规范,自由批处理实现按设计工作。

在from (或JSR 352规范)中,没有办法阻止您从给定的作业定义中创建任意数量的作业实例,因此您必须创建自己的机制。

JSR 352中的概念起点是一个作业定义,它通常会按照一些日程反复运行:每天、每月、季度等等。

自由批处理或规范中没有任何东西可以阻止您通过JobOperator 开始()方法启动新的作业实例,或者使用自由批处理REST API通过POST /ibm/api/batch/jobinstances/启动新作业实例,因为已经存在一些类似的作业实例。

阻止您重新启动已完成但从未创建新作业实例的作业实例。

这是在这个答案中用另一种方式表述的,您可以找到更详细的这里中讨论的规范概念。

因此,这里所提供的Spring批处理对于它的实现是独一无二的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54043192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档