2017-02-10 88 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> 

現在你有兩個不同的作家,您可以通過定義他們兩個單獨的可跳過的異常配置運行作業內部的兩個步驟。