提交间隔将按指定的时间间隔提交数据。我想一次提交整个文件,因为我的要求是验证文件(逐行)以及它是否在任何时候都失败。回滚。没有提交。有没有办法在春季批次实现这一目标?
答案 0 :(得分:1)
您可以将提交间隔设置为Integer.MAX_VALUE
(2 31 -1)或创建自己的CompletionPolicy
。
以下是配置步骤以使用自定义CompletionPolicy
的方法:
<chunk reader="reader" writer="writer" chunk-completion-policy="completionPolicy"/>
<bean id="completionPolicy" class="xx.xx.xx.CompletionPolicy"/>
然后你必须选择Spring Batch提供的开箱即用的CompletionPolicy
(前一个链接上的实现列表)或创建你自己的。{/ p>
答案 1 :(得分:-1)
“提交”是什么意思?
您正在讨论验证而不是将读取数据写入另一个文件或数据库。
如Michael Prarlow的评论所述,如果文件大小发生变化,可能会出现内存问题。
为了防止这种情况,我建议您通过验证步骤开始工作。只需按顺序读取数据,在处理器中逐行检查数据,如果该行无效,则抛出不可跳过的异常。使用passthroughwriter,因此没有任何东西持久存在。如果出现问题,整个工作都会失败。
如果您真的必须将数据写入db或其他文件,则可以在第二步中执行此操作。由于您已经验证了数据,因此不应该发现任何问题。
Simple PassThroughItemWriter
public class PassThroughItemWriter<T> implements ItemWriter<T> {
public void write(List<? extends T> items) {
// do nothing
}
}
或者,如果你使用Java-Api来构建你的工作和步骤,你可以简单地使用lambda:
stepBuilders.get("step")
.<..., ...>chunk(..)
.reader(...)
.processor(...) // your processor with the validation logic
.writer(items -> {}) // empty lambda expression
.build();