Spring Batch是否有模式在ItemProcessor调用前持久化原始数据?
需求与方案探讨
核心流程需求
需在单个XA事务范围内执行以下步骤:
- 选取分区数据
- 使用JDBC BatchUpdate将未修改的分区数据写入审计表(重做日志)
- 对未修改的数据调用ItemProcessor
- 使用复合写入器批量将额外操作写入其他目标
待解决核心问题
流程仅需读取一次分区数据,并严格基于该选取范围完成所有操作
现有思路与顾虑
- 曾考虑在Reader中实现重做日志的批量写入,但该方式违背Spring Batch框架设计初衷,希望找到框架原生支持的模式
- 项目采用Spring Batch XML定义配置(因其提供DSL不具备的Bean作用域控制能力),同时已引入Spring Integration,也可考虑重构为Spring Integration流
编辑1:Spring Integration替代流设计
基于@Artem Bilan的建议,已启动重构为Spring Integration流的设计,该设计包含:
- 运行时由规则引擎动态创建和销毁流及流元素
- 每个流包含一组可能为JDBC或非JDBC的Reader链
编辑2:Spring Batch架构优化
基于Mahmoud Ben Hassine的建议,可利用Listener钩子优化架构,目前架构图展示使用ItemProcessListener满足审计需求,但这未必是最终实现代码。
编辑3:方案选型说明
Artem和Mahmoud的方案均可行,已完成两种场景的详细设计:
- Artem方案:优势是可移除架构中工作端的Spring Batch,简化其他操作;劣势是需大规模重构,学习成本较高
- Mahmoud方案:优势是符合团队熟悉的代码范式,最终选择该方案
欢迎提供想法或建议。
内容的提问来源于stack exchange,提问作者pojo-guy
相关产品推荐
相关产品推荐

