如何使用spring批处理注释配置读取和执行批处理

Posted

技术标签:

【中文标题】如何使用spring批处理注释配置读取和执行批处理【英文标题】:How to read and perform batch processing using spring batch annotation config 【发布时间】:2021-12-15 01:59:35 【问题描述】:

我有 2 个具有不同数据的不同文件。该文件每天包含 10K 条记录。

Ex:
Productname price date
T shirt,500,051221
Pant,1000,051221


Productname price date
T shirt,800,061221
Pant,1800,061221

我想通过检查今天和昨天文件的价格差异来创建最终输出文件。

Ex: 
Productname price 
T shirt,300
Pant,800

通过使用弹簧批处理,我必须这样做。 我通过创建两个不同的步骤尝试了批量配置。但它只能读取数据。但无法 做处理。因为这里我需要两个文件的数据进行处理。但在我的情况下,它一步一步地阅读。

任何人都可以通过一些示例代码帮助我。

【问题讨论】:

【参考方案1】:

我建议将FlatFile 的数据保存到数据库中,用于昨天和今天的日期(如果您可以轻松识别差异的两条记录,可以是两个单独的表或在同一个表中)。使用JdbcCursorItemReaderPagingItemReader 读取此存储的数据,并在处理器级别执行数据的计算/逻辑/按摩,并根据方便创建一个新的平面文件或保存到数据库中。 OOTB Spring Batch 不提供读取数据和执行计算的功能。

建议 - 从FlatFile 读取数据并将其保存在缓存中并从缓存中读取并进行进一步处理。

【讨论】:

公共类 YesterFileWriter 实现 ItemWriter private CacheManager cacheManager;公共 YesterFileWriter (CacheManager cacheManager) this.cacheManager = cacheManager; @Override public void write(List extends YesterdaysFile> items) throws Exception cacheManager.getCache("YESTERDAYSFILE").put("listYesterdaysData", items); 上面的代码 sn-p 是将数据存储在缓存中,如果我这样做,那么我也必须为今天的文件做同样的事情。那么是否需要再配置一步处理呢?如果是,那么阅读器、处理器、编写器需要做什么才能将最终输出存储在数据库中?你能解释一下吗?

以上是关于如何使用spring批处理注释配置读取和执行批处理的主要内容,如果未能解决你的问题,请参考以下文章

使用 Groovy、IntelliJ 和 Gradle 在项目中“重新运行 Spring Boot 配置注释处理器”

如何在春季批处理中使用 MultiResourceItemReader 在读取单个 csv 后指定任务执行器以生成线程

@ConfigurationProperties Spring Boot 配置注释处理器在类路径中找不到

如何在 IntelliJ IDEA 14 中为当前项目工作配置注释处理?

如何配置spring批处理不自动创建用于存储元数据的批处理表?

重新运行 Spring Boot 配置注释处理器以更新生成的元数据