问题标签 [jsr352]

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.

0 投票
1 回答
8409 浏览

spring-batch - JSR 352 Spring Batch 与 Java EE

关于 JSR 352、Spring Batch 和 Java 的几个问题

1) 什么时候有人会使用 Java 在 Spring Batch 上构建批处理 JSR-352 应用程序?我最初的看法是它需要比 Spring Batch 更多的 Java 编码。

2) Java EE 版本 7 是否实现了 JSR-352?还是它只是随规范发布而开发人员必须实施它?而 Spring Batch 已经实现了它,从而节省了开发人员的编码时间?

0 投票
1 回答
365 浏览

java - 使用 javax.batch/jsr352 的独占批处理作业

我们有一个应用程序可以进行大量的导入和导出——基本上是在 CSV 文件和数据库表之间。

由于各种原因(如“遗留代码”),一些导入和导出是冲突的(您不能同时执行它们)。

我们正在调查javax.batch。从概念上讲,它非常适合。但我们真正未能找到的是以某种方式管理我们想要运行的某些工作的“排他性”的可能性。

有人可以提供一个指针吗?我们将如何实现独占批处理作业javax.batch?或者我们应该为此实现我们自己JobOperator的?

更新

我所说的“排他性”是指能够定义某些作业可能不会并行执行。在最简单的情况下,这将意味着“一次只执行一个作业”。在更复杂的情况下,更复杂的逻辑,例如“A 类型的作业不能与 A 或 B 类型的其他作业一起运行,但 C 可以”。例如,“工作类型”jobXmlName 在这里(与工作参数无关)。

0 投票
1 回答
6818 浏览

java - 在创建名称为“batchPropertyPostProcessor”的 bean 时,批处理作业初始化失败

我正在尝试使用 JSR-352 API 和 Spring Batch 3.0.4 作为实现来实现示例批处理应用程序。

在创建名为“batchPropertyPostProcessor”的 bean 时,批处理作业执行在初始化阶段失败:

我的批处理运行器:

我的 sampleJob 定义:

我的阅读器、编写器、处理器和侦听器的 Spring bean 配置

读取器、写入器和处理器由 Spring 实例化并在作业运行中正确使用。当我将侦听器添加到作业定义时,它停止工作。

我调试了代码,我看到 dataListingStepListener bean 在 Spring 上下文中被初始化。我不明白为什么对侦听器(<listener ref="dataListingStepListener"/>)的引用不被识别为 Spring bean,而 Spring 正在尝试加载名为“dataListingStepListener”的类。

我的配置好吗?难道我做错了什么?

0 投票
1 回答
483 浏览

java - JSR 352 分区块处理

我正在尝试以 JSR 352 模式在 Spring Batch 中运行一个块步骤(读取器 - 处理器 - 写入器)。我想知道分区是否MyItemReader为每个分区创建了批处理工件()的新实例,或者工件是否有状态(即工件中定义的全局变量被多个线程重用而不是线程安全的)?

谢谢

0 投票
0 回答
917 浏览

spring-batch - 春季批处理,管理在项目处理器中完成的事务项目的回滚

这涉及使用 JSR 作业,因此我无权使用作业规范中的 tasklet 定义。就工作规范而言,我得到的指示是仅支持 JSR 352 功能。

这是一个工作的例子:

在 ItemProcessor 中,我有兴趣拥有某种类型的回调/侦听器,如果块例如在写入步骤期间失败,它可以触发其中发生的事务项的回滚。

所以一个很好的例子是我在 ItemProcessor 中发生了某种 db 或 jms 操作。如果在块失败的编写器部分期间,我希望回滚在作为此迭代一部分的项目处理器期间发生的所有那些操作(或几个项目计数> 1)。

我已经研究了基于 jsr 规范的各种可用的侦听器,似乎没有任何东西允许这种类型的实现。此外,spring 似乎不像真正的 spring 批处理那样将处理器包装在事务中。我在创建数据库连接并测试它们以查看它们是否具有事务意识时所做的测试总是返回错误。

在完全自定义的实现之外,我正在寻找什至可能的东西,如果是的话,有任何关于如何完成它的指导。

0 投票
1 回答
226 浏览

spring-batch - Spring Batch Jsr 352,管理处理器跳过外部/跳过侦听器之前

我正在尝试找到一种方法来管理进程侦听器中的跳过场景(或者也可以是读取或写入侦听器)。我发现跳过侦听器似乎是在进程侦听器的错误方法之后执行的。这意味着我可能会以某种方式处理错误,而不知道这是一个要跳过的异常。

有什么方法可以知道某个特定的异常被跳过侦听器跳过了吗?可以拉入进程侦听器或可能其他地方的东西。

0 投票
1 回答
1366 浏览

spring-batch - 春季批量检查作业完成的最佳方法

我正在寻找一种最佳方法来确定是否已完成不涉及使用作业侦听器的春季批处理作业。我正在使用符合 jsr 的组件。没有工作监听器的原因是我不想依赖最终用户正确定义他们的工作以包含监听器。

到目前为止我想出的唯一方法是将它放在调用启动/重启的类中

我在这里遇到的问题是这会查询数据库,并且在相当长时间运行的作业中,这可能会查询数据库数千次以获取状态。似乎应该有更好的方法。操作员或其他对象在内存中的某些位置将具有作业的当前状态,而无需转到数据库。或者可能是一种无需在工作规范中定义的回调方法。

0 投票
1 回答
400 浏览

spring-batch - Spring batch jsr 352如何防止分区作业使线程保持活动状态,从而防止进程结束

让我解释一下我的应用程序是如何设置的。首先,我有一个独立的命令行启动应用程序,该应用程序运行一个主程序,而主程序又在传递适当参数的作业操作员上调用 start。我知道 start 是一个异步调用,一旦我调用 start ,除非我在我的 main 中阻塞了一些它是如何死的。

我遇到的问题是,当我运行分区作业时,它似乎使一些线程处于活动状态,从而阻止了整个处理结束。当我运行非分区作业时,一旦作业完成,进程就会正常结束。

这是正常和/或预期的行为吗?有没有办法告诉分区线程死亡。似乎分区线程在作业完成后被阻塞等待某些东西,它们不应该是吗?

我知道我可以监控主要的批处理状态并可能结束它,但正如我在另一个问题中所说的那样,这给数据库增加了大量的喋喋不休,并不理想。

我的工作规范的一个例子

编辑:

好的,阅读有关此问题的更多信息并查看 spring 批处理代码,至少在我看来,JsrPartitionHandler 中似乎存在一个错误。具体来说,handle 方法会在本地创建一个 ThreadPoolTask​​Executor,但是该线程池永远不会被正确清理。应该在该方法返回之前调用关闭/销毁以执行一些清理,否则线程会留在内存中并超出范围。

如果我在这里错了,请纠正我,但这绝对是问题所在。

我要去尝试改变它,看看它是如何发挥作用的。我做了一些测试后会更新。

0 投票
1 回答
208 浏览

java - Java Batch(JSR-352) 和会话上下文 CDI

我正在使用 java Batch (JSR-352),可以在其中使用会话 bean 吗?我需要一个带有 @SessionScope 注释的 Bean,以便在其中捕获一些信息,以区分正在运行批处理的用户类型。

可以在规范中使用会话上下文 CDI 吗?如果可能的话最好的做法是怎样

0 投票
3 回答
5221 浏览

spring-batch - Spring batch jsr 352 skip-limit 如何获得无限制默认值或设置无限制

我试图弄清楚如何为跳过限制设置一个无限值,而无需随机定义一个非常大的整数值。

jsr 352 明确指出“默认为无限制”。但是在实际定义可跳过的异常时,我还没有弄清楚如何获得默认值。

我尝试了 0 和 -1,但两者都未能通过 Spring Batch 在创建作业时执行的正数验证。如果在定义可跳过的异常时未添加 skip-limit 属性,则会生成错误并且不会启动作业。

我是否误解了规范所说的内容,或者在这种情况下,spring batch 没有正确实现 jsr。从表面上看,skip-limit 应该有一些默认为无限值的方法。