【问题标题】:skippable-exception-classes in spring batch to skip only one row春季批处理中的可跳过异常类仅跳过一行
【发布时间】: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


【解决方案1】:

我会推荐使用物品分类器

public class ItemTypeClassifier {
    @Classifier
    public String classify(Item item) {
        return item.getType();// returns "Employee", "Department"
    }
}

然后是具有两个不同项目编写器的路由器实现,一个用于员工,一个用于部门。

<bean id="classifier"  class="org.springframework.batch.classify.BackToBackPatternClassifier">
    <property name="routerDelegate">
        <bean class="ItemTypeClassifier" />
    </property>
    <property name="matcherMap">
        <map>
            <entry key="Employee" value-ref="emplyeeItemWriter" />
            <entry key="Department" value-ref="departmentItemWriter" />
        </map>
    </property>
</bean>

然后

<bean id="ItemWriter" class="org.springframework.batch.item.support.ClassifierCompositeItemWriter">
    <property name="classifier" ref="classifier" />
</bean>

现在您有两个不同的编写器,您可以通过为它们定义两个单独的可跳过异常配置来在您的作业中运行两个步骤。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-13
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    相关资源
    最近更新 更多