java - 使用与 Spring Batch 相同的输入参数启 Action 业时,Liberty Batch 不会引发异常(JobInstanceAlreadyExistsException)

标签 java jakarta-ee websphere-liberty java-ee-7 jsr352

我正在 liberty 服务器上的 java-ee-7 中开发批处理作业。使用 REST API 启动批处理作业。这里的问题是当我尝试为相同的输入参数启动批处理作业时,会创建新的作业实例。而 Spring Batch 进程会抛出一个错误,指出 JobInstanceAlreadyExistsException。我期待这样的事情,以避免为相同的输入参数创建新作业

输入参数和批处理状态已使用 liberty 服务器表(WLPJOBINSTANCE、WLPSTEPTHREADINSTANCE、wlpjobparameter 等)存储在 Oracle 数据库的持久存储中。

<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>

预期:如果传递相同的输入参数,作业应引发异常。 实际:它为相同的输入参数创建新的作业实例

最佳答案

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

我将在这里给出第二个完全不同的答案。另一个答案证明了为什么 Liberty Batch 以及更普遍的 JSR 352 规范永远不会将提交与前一个作业参数相同的第二个作业视为错误情况。

但如果您确实想阻止这种情况,您可以在 Liberty Batch 中执行此操作,方法是在提交之前使用 REST API 查询匹配的作业实例是否已存在。不过,此时,您可以中止/阻止作业提交。

假设我想匹配 BonusPayoutjobName,作业参数 parm1 的值为 1000 和作业参数parm2 匹配 500*(使用 glob/通配符)。

我可以通过 URL 做到这一点:

https:///ibm/api/batch/v4/jobinstances?jobName=BonusPayout&jobParameter.parm1=1000&jobParameter.parm2=500*

doc中的注释还有各种其他选项,例如忽略大小写(或不忽略)。

因此,如果我找到匹配项,我可以选择不继续(再次)提交作业。

关于java - 使用与 Spring Batch 相同的输入参数启 Action 业时,Liberty Batch 不会引发异常(JobInstanceAlreadyExistsException),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54043192/

相关文章:

java - Hybris 生成现有的 PK

java - 将整个类序列化为字符串字段而不是 JSON 对象

java - ResultSet 从查询转换为 int

java - WAS Liberty 配置文件中的 EclipseLink JPA

java - Spring JPA ManyToOne 删除句柄

可变参数和装箱的 Java 问题

java - 如何查找第三方工具的 java 已弃用 api?

java - 您如何管理 java webapps 中的嵌入式配置文件和库?

ssl - javax.net.ssl.SSLHandshakeException : No negotiable cipher suite when calling Apple APNS using HTTP2 implemented by jetty library

java - "500 Error: Failed to establish a backside connection"- Bluemix Selenium 测试