问题标签 [spring-batch-tasklet]

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 投票
2 回答
321 浏览

spring-batch - 使用 Spring 批处理记录读取、写入和错误计数

我有一个 Sprint 批次,其工作为

tasklet 伪代码是

目前,我通过计算 objectList 的大小来记录读取计数,如果我必须记录已处理的记录和错误记录,我将不得不跟踪 someDataSendOperation 方法中的变量。在这种情况下,是否有任何 Spring 现成的功能来处理读取、写入和错误计数?

0 投票
2 回答
490 浏览

spring - Spring Batch - 从 S3 读取多个文件

就像从 s3 中读取 spring 批处理中的单个文件一样,我们使用

但是,如果我想从某个特定文件夹/键中读取所有文件,那么 MultiResourceItemReader 是否有一些东西,如下所示(我们用于本地文件系统)

0 投票
1 回答
491 浏览

spring - Spring Batch:终止当前正在运行的作业

我在终止当前正在运行的春季批次时遇到问题。我写

在我浏览完 spring 文档后在我的代码中。

我面临的问题是有时工作的终止按预期发生,而其他时候工作的终止没有发生。事实上,每次我在 joboperator 上调用 stop 时,它都会更新 BATCH_JOB_EXECUTION 表。当终止成功发生时,通过在我的批处理过程中终止 jobExecution,作业的状态将更新为STOPPED。其他时候,当它失败时,它正在完成批处理的其余不同流程,并将BATCH_JOB_EXECUTION 表上的状态更新为FAILED 。

但是每次我在作业操作员中调用停止时,我都会在控制台中看到一条消息

我的项目中有一系列流程和步骤。

总的来说,我的批处理过程如下所示:
JobBuilderFactory 有 3 个流程
每个流程有一个 stepbuilder 和两个 tasklet。
每个 stepbuilder 都有一个分区器和一个基于块(大小为 100)的 itemReader、itemProcessor 和 itemWriter。

当我在 jobBuilderFactory 中执行第一个流程时,我正在调用 stop 方法。完成整个过程大约需要 30 分钟。因此,从我调用 stop 方法开始大约需要 20-25 分钟,并且每个流中的块大小为 100,并且我正在处理超过 500k 条记录。

所以,我的问题是为什么 jobExecution 在调用停止方法时有时会停止(这就是我想要的),以及为什么它不能在剩余的时间内停止 jobExecution。

提前致谢

0 投票
1 回答
206 浏览

spring-boot - 如何评估在应用程序中是使用spring batch还是scheduler?

我已经在 Spring Boot 中开发了一个业务逻辑,需要每 60 天运行一次。我对是否将其转换为 Spring Batch 或使用调度程序注释有点困惑。我应该考虑哪些所有因素来评估相同?他们中的任何一个都比另一个有优势吗?我是调度程序批处理概念的新手,这是我第一次从事同样的工作。

0 投票
1 回答
110 浏览

spring - Spring Batch:在 StoppableTasklets 中实现 stop 方法

我正在调用以下部分来停止这项工作。

上述方法正在停止作业,但 Tasklet 仍在运行。在阅读了来自 stackoverflow 的评论后,我更改taskletStoppableTasklet在我的项目中使用,这样当我调用joboperator.stop()

我的问题是,我不确定如何识别作业是否已停止并在我实施时在停止覆盖方法中执行必要的操作StoppableTasklet。你能告诉我如何在覆盖的方法中做到这一点吗?

0 投票
0 回答
85 浏览

java - Spring FlatFileItemWriter 会延迟写入文件吗?

我有一个 Spring 批处理,它将数据写入文本文件,写入文本文件后,批处理还有另一个步骤来重命名文件并进行备份。以下是我的批处理 xml 中的代码的一部分:

这是fileGenerationFileWriter豆子:

这是fileGenerationCompletionPolicy豆:

这是fileGenerationBackupFileTasklet豆子:

这个类没有什么特别的,它只是实现了 SpringTasklet并执行了 execute():

但是,在这个类中,日志显示文件长度为0,表示文件为空。但实际上,我去检查文件,文件中写入了正确的数据。意味着 TaskLet 步骤在 Writer 完成其工作之前首先运行。

由于 if 检查发现文件长度为 0,因此重命名过程没有运行。

我在想这是 Spring Writer 延迟写入文件和我Tasklet先运行的原因。是不是Spring批处理中的步骤不同步?无论作者Tasklet是否完整,意志都会运行?

如果是,如何防止这种情况?

0 投票
1 回答
53 浏览

java - 在这种情况下使用 Tasklet 或 Chunk

read sub-folders/directory我有一个工作/任务given folder/path。路径是动态的,我们从Controller. 目前,我使用Tasklet了 3 个 tasklet,一个用于读取子目录,另一个用于处理它以准备对象以保存到 DB,最后一个用于将处理后的数据对象写入数据库。文件夹可以有任意数量的子文件夹。目前,我使用了以下代码:

一次读取所有子文件夹。为此,我遵循了这个实现https://www.baeldung.com/spring-batch-tasklet-chunk示例Tasklet。这是正确的方法吗?我还需要使用多线程异步运行作业。由于可能有大量子文件夹,因此so there can be huge number of or列表 of data to process and write to the database.

请提出适当的方法。我正在学习Spring Batch,也做了一些例子file read/process/write并为此使用Chunk了方法。但我的工作是读取文件夹/路径的子目录,所以我无法决定采用哪种方法。

0 投票
1 回答
46 浏览

spring - 如何在 TABLE batch_step_context 的 COLUMN(可能是 FIELD)short_context 中添加额外信息?

1.问题总结

运行作业后,我看到 TABLE batch_step_context 像图片: 表的屏幕截图

FIELD short_context 的漂亮信息是:

如何在其中添加额外信息?

例如,工作完成后,我希望我的 FIELD short_context 是这样的:

我怎样才能添加额外的信息,如“输出”。

2.我的代码的一部分

0 投票
1 回答
125 浏览

apache-kafka - 如何使用kafka集成在春季批处理中调用StepExecutionListener?

下面是 etl.xml 中的作业配置

<batch:job id="procuerJob">

</batch:job>

下面是用于向主题发送消息的代码。

ListenableFuture<SendResult<String, message>> listenableFuture = kafkaTemplate.send(message);

listenableFuture.addCallback(new ListenableFutureCallback<SendResult<String, message >>() {

}

一旦 kafkaTemplate.send(message) 被执行,监听器就会被调用并且作业完成。我看到 onSuccess()、onFailure() 在作业完成后被调用。如何更改作业的配置,以便在收到来自 kafka 主题的确认后调用侦听器?

0 投票
1 回答
279 浏览

spring-boot - 如何在 Spring Batch 中的每个分区步骤完成后添加 tasklet 以运行

我是 Spring Batch 的新手,并实施了一个 Spring Batch 作业,它必须从 DB 中提取大量数据集并写入文件。以下是对我来说按预期工作的示例作业配置。

由于数据集很大,我已将任务执行器的线程池值配置为 10,网格大小为 50。通过此设置,10 个线程一次写入 10 个文件,读取器以块的形式读取文件,因此读取器处理器和写入器流程正在迭代多次(对于一组 10,在移动到下一个分区之前)。

现在,我想添加一个tasklet,一旦一个线程的所有迭代(读取、处理、写入)完成,即在每个分区完成后,我可以在其中压缩文件。

我确实有一个清理 tasklet 最后运行,但是有压缩逻辑意味着首先获取从每个分区生成的所有文件,然后执行压缩。请建议。