2017-02-10 57 views
0

我是新的。如果用名雇主存在MySQL的春天批次,例如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 

这是我的格式

将抛出DataIntegrityViolationException

,所以我说

<batch:skippable-exception-classes> 
<batch:include class="org.springframework.dao.DataIntegrityViolationException" /> 
</batch:skippable-exception-classes> 

所以该W生病跳过整个单元相应的用人单位和部门记录

我有什么做的,即使员工存在,引发此异常

然后继续处。

+0

雇主和部门有不同的加工商吗? –

+0

不,如果我创建一个单独的处理器并跳到下一步? –

+0

创建自定义处理器,检查数据库中的雇主,如果找到,则跳过它(返回null)。否则返回雇主DTO并将其传递给作者 –

回答

0

我会建议使用项目分类

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> 

现在你有两个不同的作家,您可以通过定义他们两个单独的可跳过的异常配置运行作业内部的两个步骤。