问题标签 [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 投票
0 回答
183 浏览

java - 获取当前处理块的先前块值 - 弹簧批处理

我有一个 Spring 批处理应用程序,我使用了面向块的编程,因为我扩展了 FlatFileItemWriter 类来生成输出文件。

问题是我将有超过 1000 条记录作为输入,并且块值是 100。所以 customFlatFileItemWriter 将被调用 10 次。但问题是每条记录都是相互关联的,我应该检查前一个 id 和下一个记录 id。

批量输入

为此,如果块在 id - 124 处完成,那么我们在操作记录 id '125' 时无法获取记录 id '124'。

在 stepExecution 中,我们可以将对象保持在 Execution 中并进行下一个任务,但是在这种情况下,我们没有得到 stepExecution,所以无论如何都要让对象进行下一个块操作。

我的自定义 FlatFileItemWriter 的代码

0 投票
1 回答
621 浏览

java - 在春季批处理中,我们如何将处理后的文件移动到另一个文件夹,我正在使用 MultiResourceItemReader 和块处理

在 Spring 批处理应用程序中,我们如何在处理每个文件时将文件从 BatchFileDir 文件夹移动到目标文件夹。BatchFileDir 文件夹中会有一堆文件,所以我使用 MultiResourceItemReader。我也在关注基于块的处理。

我有所有的批处理文件:

项目阅读器是:

并且项目处理器是:

ModifiedItemProcessor 是:

步骤是:

0 投票
1 回答
162 浏览

java - 使用名称与从业者一起处理不同的文件 - Spring批处理

**我正在开发 Spring Batch,它将从文件夹中读取所有 CSV 文件,并且需要根据文件 bame 执行不同的过程。以下代码适用于一种文件(名称)类型。但问题是我需要根据“文件名”决定步骤执行。任何人,请帮助这个逻辑?

我的文件名格式:

基于 EMP 或 STD,我需要执行不同的处理逻辑。如果是 CRE,则创建逻辑(步骤),UPT 表示更新数据。

以下是我当前的代码结构:

0 投票
0 回答
58 浏览

spring-integration - 我的集成流程和 tasklet 出了什么问题

这是我的流程 LS-GET(SFTP 出站网关:从远程 SFTP 服务器下载文件。)和 MessagingGateway。

这是我的 spring-batch tasklet 和 Junit。通过 tasklet 构造函数注入的 MessagingGateway。

当我执行 getFlows 测试代码时。我遇到了异常。但文件下载到我的本地计算机。我不知道。我尝试了许多变体,但没有取得任何进展。

@EnableIntegration 放置每个 spring-integration 相关的配置类。@IntegrationComponentScan 还放置了我的主要流程配置类(带有要扫描的包名称的字符串数组)。如果@EnableIntegration 注解位于多个类中会发生什么?

我应该将所有 spring-batch 和 spring-integration 配置类合并为一个吗?

另外,我测试了 ControlBus(在 spring-batch tasklet 中向轮询器发送消息)并得到了同样的异常。

@Lazy,@DependsOn 也不起作用。(@Lazy 添加到 ControlBus,@DependsOn 添加到 spring 服务类中:Spring-batch 作业也通过 rest API 调用手动启动/停止。)

在 spring-integration 独立应用程序中从未发生过这些异常。

0 投票
1 回答
108 浏览

java - 如何在 1 个给定的 UAT 服务器中以计划模式运行 spring 批处理作业,但在所有 3 个给定的 UAT 服务器中运行手动作业?

这与 Spring Batch Scheduling Problem 有关。

我有 3 个 UAT 服务器(UAT1、UAT2 和 UAT3)。任务是仅在 UAT3 服务器中运行计划的批处理作业,但是当我通过手动点击端点 url 运行批处理作业时,它应该在所有 3 个服务器中运行。我们使用了旧的 Batch Executor 框架方法。我们有一个端点 java 类,用于公开用于手动运行的端点 url,用于批量运行的执行程序类,并使用 batch-contxt.xml 文件配置调度。由于它有点紧密耦合,因此任何更改都会影响手动和计划运行。

如何使用弹簧批处理概念修改方法以包含上述问题?

0 投票
1 回答
83 浏览

spring-boot - 在 Spring Batch 中,我们如何比较 2 个具有不同记录布局的平面文件并在它们之间存在不一致时抛出错误消息

考虑以下场景,其中我有 2 个不同的 CSV 文件和一个公共引用字段。如果file2没有类似于file1的request-id,我想读取这两个文件并报告错误。

File1 是主文件,文件 2 中的数据应始终具有来自 file1 的引用。

例子:

文件1

reqID,名字,姓氏

111,约翰,米勒

文件2

reqID, custID, 数量

111,美国广播公司,100

222、zxc、200

333,qwe, 300

在上述情况下,我想报告一个错误,即 file1 中不存在 reqid 222 和 333,因此我不能接受 file2 中的这些记录以进行进一步处理。

我们不能使用 MultiResourceItemReader,因为它不支持不同记录格式的文件。

我正在寻找使用 spring Batch 框架的解决方案。

任何的意见都将会有帮助。

问候, 高拉夫

0 投票
1 回答
390 浏览

spring-boot - @BeforeStep 未在 AsyncProcessor 中调用

我一直在使用同步 ItemProcessor 和 Writer 但现在我将其移至异步,如下代码所示:

在我的 ItemPocessor<I,O> 中,我使用 @BeforeStep 来获取我存储在 StepExecutionContext 中的值:

这里是我的 AsyncProcessor 的声明:

问题是上面的方法没有被调用。如何从 StepExecution 获取值并将它们传递到异步ItemProcessor 或 AsyncItemWiter?

0 投票
1 回答
791 浏览

spring-batch - Spring Batch 多进程重负载,每个进程下都有多个线程

我有一个场景,我需要大约 50-60 个不同的进程同时运行并执行一个任务。

每个进程都必须使用 sql 查询从数据库中获取数据,方法是传递一个值并获取要在后续任务中运行的数据。从 table_1 中选择 col_1、col_2、col_3 其中 col_1 = :Process_1;

由于我们在 Apache Camel 中有 Aggregator 和 parallelProcessing,Spring Batch 是否有任何类似的功能可以完成相同的工作?

我是 Spring Batch 的新手,目前正在探索它是否可以处理该卷。因为这将是一个 24*7 运行的重负载应用程序,并且每个进程都需要同时运行,其中每个线程应该能够支持进程内的多个线程。

有没有办法监视这些进程,以便它无论如何都会被终止,我应该能够重新启动该特定进程?请帮助解决这个问题。

0 投票
1 回答
191 浏览

spring-batch - Spring批处理平面文件读取器访问要在Writer中使用的页眉和页脚变量

我正在使用弹簧批处理平面文件阅读器来读取带有页眉和页脚值的文件。下面是示例文件,输出文件的每条记录都应附加标题日期和文件顺序。示例输入和输出如下。有人可以建议吗

  1. 如果有办法将页眉值和页脚值设置为作业参数并在编写器中使用?
  2. 有什么方法可以在 writer 中获取页眉和页脚值?提前致谢!

输出:(日期+文件序列(001)+姓名+年龄)

下面是我的文件阅读器

0 投票
1 回答
23 浏览

spring - 有没有办法 MySQLMaxValueIncrementer 在春季批处理中连接到多个数据源

我的项目中有 2 个数据源 datasource1 连接到 datahost1 和 datasource2 连接到 datahost 2。我有 2 个作业为 datasource1 和 datasource 2 触发,现在 MySQLMaxValueIncrementer 应该连接到 datasource1 以从 datasource1 获取下一个增量 Id,对于第二个作业它应该得到来自第二个数据源。由于只有一个 MySQLMaxValueIncrementer,它连接到单个数据源。有没有什么办法可以通过dynamicalluy说在运行时根据条件使用数据源来解决这个问题