【发布时间】:2017-02-10 17:53:37
【问题描述】:
我是 spring batch 的新手,例如 csv 文件
Employee Name Id age year
Department DeptName deptId desc
Department DeptName deptId desc
Employee Name Id age year
Department DeptName deptId desc
Department DeptName deptId desc
这是我的格式
如果存在同名雇主,mysql 将抛出 DataIntegrityViolationException
所以我加了
<batch:skippable-exception-classes>
<batch:include class="org.springframework.dao.DataIntegrityViolationException" />
</batch:skippable-exception-classes>
所以这将跳过整个单元相应的雇主和部门记录
即使 Employee 存在并抛出此异常,我必须做什么
然后继续部门。
【问题讨论】:
-
您的雇主和部门是否有不同的处理器?
-
不,如果我创建一个单独的处理器并跳到下一步?
-
创建一个自定义处理器,检查数据库中的雇主,如果找到则跳过它(返回 null)。否则返回 Employer DTO 并将其传递给 writer
-
当需要处理大量记录时,检查每个员工是否存在会使处理更加繁重对吧?如果我尝试在错误文件中只写入重复的对象,那么 onSkipInWrite 我可能会得到 Employee 瞬态对象,任何可能得到 Employee 项
-
如果我可以使用项目处理器和缓存达到相同的目标(以避免同一对象的多个数据库命中),我通常会尽可能避免异常处理。如果您愿意,请尝试捕获写入错误;你在 onSkipItmeInWrite 中有目标对象。
标签: spring spring-data-jpa spring-batch