问题标签 [jberet]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
transactions - Java 批处理事务控制
我有一些用于与 bean 托管事务一起运行的代码(我的代码将处理何时启动或提交事务)。此代码已迁移到容器管理事务,最后在 Java Batch 中使用(Wildfly 中的 JSR-352)。
现在我们处理的数据量增加了,我们看到了与事务相关的问题。在各种情况下,甚至查询都会失败,并且异常表明事务被标记为仅回滚。所以我认为之前的迁移过程中一定发生了一些错误。
我仍然想使用容器管理的事务,但是......
- 如何在批处理中正确使用 CDI,以便它接收 EntityManager?我是使用@PersistenceContext、@PersistenceUnit 或@Inject 注释,还是组合使用?
- 如何使用合理的 CDI 范围?查看https://github.com/jberet/jberet-user-guide/blob/master/custom_cdi_scopes/README.md会出现三个范围:作业、步骤和分区。由于我运行了太长时间的批处理,我可能需要分区范围,但是批处理将如何控制分区?
- 我了解到读取器/处理器/写入器模式控制大量记录的事务 ootb。该模式是否适用于读取记录、处理它然后立即更新或删除它的代码?
java - jdbcItemReader 支持分区吗?
使用https://github.com/jberet/jberet-support中的 jdbcItemReader并希望使用分区来加快处理速度。
分区数(此处为 16)对重复写入的数据有副作用。每个分区对相同的数据执行相同的工作,而不是将输入数据集拆分为 n 个不同的分区。
已编辑:下面的代码显示了实现它的正确方法。注意:您的 SQL 查询需要返回有序数据:N 个分区,这里是 16,表示 16 个 reader 将运行查询!
jakarta-ee - 通过 JobOperator 停止执行时的作业级回调
我正在使用 aJobListener
来编写批处理执行日志文件。在我的第一次尝试中,我的代码依赖于afterJob()
在每种情况下都被调用,但我发现,当执行通过JobOperator.stop(jobExecutionId)
. 我也明白可以恢复停止的工作。
批处理 API 是否为要通知停止事件的作业提供挂钩?
javax.batch.api.listener.JobListener.afterJob()
:
afterJob 方法在作业执行结束后接收控制权。
javax.batch.operations.JobOperator.stop(jobExecutionId)
:
该方法通知作业执行停止然后返回。
java - Jboss EAP 7.4.1 配置问题
我正在尝试将其中一种环境 EAP 7.0 引入 EAP7.4.1,并且我已成功迁移其中一种环境。但是,在其中一种环境中,当我在域模式下升级后启动 EAP 时,服务器内存不足并出现以下错误:
我试图将确切的配置复制为 EAP 运行平稳的其他环境,但没有发现任何区别。如果我试图找到这个错误,我找不到任何帮助,我只能看到它与 Jboss EAP 的监控服务有关。有人可以帮忙吗?
quarkus - JdbcRepository 的自定义属性或 .ddl
我正在使用quarkiverse/quarkus-jberet集成,一切正常。
移动到 jdbc 存储库我需要将模式添加到 JBeret 表,但我还没有找到解决方案,因为似乎不支持本机 JBeret 方法(即传递具有特定键的属性对象以自定义或加载自定义 DDL)。有关如何绕过或解决此问题的任何建议?
java - JBeret (JSR352) 回滚预期行为
如果我的理解是正确的,来自 JSR352 第8.2.1.4.4 Default Retry Behavior - Rollback部分:
当发生可重试异常时,批处理运行时的默认行为是回滚当前块并使用 item-count 为 1 和检查点策略 item 重新处理它
以及从第8.2.1.4.3 节重试并跳过相同的异常:
这允许最初为整个块重试异常,然后如果它再次出现则跳过它。
因此,我的期望是,如果发生可重试和可跳过的异常,则“当前”块将回滚并以项目计数 1 重新启动,并跳过此“增量重放周期”内的任何错误。
随后,一旦达到块大小,处理将返回到配置的大小(继续标准处理)。
我观察到一些意外行为,其中“失败的块”被完全跳过,增量处理从后续块开始。因此,我缺少(一大块)记录。
例如,记录计数从下面的 341900 移动到 342001(错过了 341901-342000 的处理):
我的理解在这里是否正确,如果是这样,这看起来像一个错误还是我在 ItemReader#checkpointInfo() 中遗漏了一些“用户义务”。
jberet-core
版本是1.4.4.Final
,来自:
谢谢
jsr352 - 如何防止 JBeret 中两个 Job 中使用的 Step 并行执行?
我在 Wildfly 上使用 JBeret,假设我有由 StepA、StepB、StepC 组成的 Job1。假设我有由 StepB 组成的 Job2。
现在,当两个作业同时运行时,我想阻止 StepB 并行执行。这意味着如果 Job2 运行 StepB 而 Job1 想要启动 StepB,则 Job1 应该等待或失败。
我怎样才能做到这一点?
谢谢你。