我们可以说Spring Batch是 JSR 352(Java 平台批处理应用程序规范)的实现吗?
JSR 352 还有哪些其他实现?
我有一个用JSR-352(在wildfly上使用jberet)实现的批处理。
我有一个项目计数为15的块,并java.lang.Exception配置为可重试和可跳过的异常。
当有很多例外时,大多数项目将被多次处理。在这种极端情况下,所有项目都会在编写器中引发异常:
此时,由于没有成功的已处理项目,因此仍然没有检查点。因此,读者再次从第一项开始。所有30个项目的item-count = 1等。
如果存在许多此类失败,则批次将一次又一次地处理所有项目。
我认为也需要为跳过的项目设置检查点,因为跳过的项目不应该再次处理。
我认为这是规范中的错误,所以我已经在那打开了一个问题:https : //github.com/WASdev/standards.jsr352.batch-spec/issues/15 还是我错了,并且误解了实现?
在Spring Batch中如何实现?
JSR 352 - Java 平台的批处理应用程序使用分区提供并行功能。批处理运行时可以在不同的分区中执行一个步骤以加快进度。JSR 352 还引入了threads定义:我们可以定义要使用的线程数,例如
<step id="Step1">
<chunk .../>
<partition>
<plan partitions="3" threads="2"/>
</partition>
</chunk>
</step>
Run Code Online (Sandbox Code Playgroud)
然后我就很困惑:如何给出一个赞赏的分区计划,使每个线程都被占用并确保CPU平衡?
例如,有表A、B、C要做,它们的行分别是10亿、100万、1000。该步骤旨在将这些实体处理为文档,一个实体转到一个文档。文件制作的顺序并不重要。这些表实体的CPU时间分别为1s、2s、5s。线程数为 4。
如果有 3 个分区,每个表类型一个,那么该步骤将需要1 * 10^9几秒钟才能完成,因为:
1 * 10^9 * 1s = 1 * 10^9s在线程 2 上运行1 * 10^6 * 2s = 2 * 10^6s在线程 3 上运行1 * 10^3 * 5s = 5 * 10^3s在线程 4 上运行然而,当线程 2 被占用时,线程 3 …
我试图弄清楚如何为跳过限制设置无限值,而不仅仅是随机定义一个非常大的整数值。
jsr 352 特别指出“默认没有限制”。但我还没有弄清楚在实际定义可跳过异常时如何获得默认值。
我尝试了 0 和 -1,但都未能通过 Spring Batch 在创建作业时的步骤中执行的正数验证。如果在定义了可跳过异常时未添加跳过限制属性,则会生成错误并且不会启动作业。
我是否误解了规范的内容,或者 Spring Batch 在这种情况下没有正确实现 jsr?从表面上看,skip-limit 应该有某种默认为无限值的方法。
因此,我在写入数据库的步骤中有 2 个分区。我想记录每个分区写入的行数,得到总和,打印到日志中;
我正在考虑static在编写器中使用变量并使用步骤上下文/作业上下文将其放入afterStep()步骤侦听器中。然而,当我尝试时,我得到了null。我能够从close()Reader 中获取这些值。
这是正确的做法吗?或者我应该使用分区收集器/减速器/分析器?
我在 Websphere Liberty 中使用 java 批处理。我正在 Eclipse 中开发。
在z/OS上运行java批处理程序的方法在z/OS上相对较新,或者已经很长时间了吗?
这个问题背后的原因是因为,我听说IBM这是一个相对较新的尝试,并且市场上没有太多的实时系统在这种方法中运行.真的吗 ?
注意:我知道JSR352已经存在了很长一段时间但是,我的问题是针对z/OS(大型机)中Liberty配置文件的支持
Batch API 是一个很酷的框架。JBoss 实现“jBeret”添加了更多一些很酷的东西,比如 REST API 和 UI。
Batch API 会在某个时候成为 Quarkus 的一部分吗?
jsr352 ×8
java ×2
java-batch ×2
spring-batch ×2
batch-file ×1
jakarta-ee ×1
java-ee ×1
jbatch ×1
jberet ×1
jsr ×1
mainframe ×1
quarkus ×1
zos ×1