2013-03-15 57 views
3

春季批次我很新。我要求在我要讀有報頭(字段名)的記錄和數據記錄的文件春季批次:讀取文件:如果字段爲空設置默認值

  1. 我要驗證第一個記錄(查看匹配的字段名稱對組預定義的名字) - 注意這個記錄必須skipped-我的意思是不應該的字段值的處理器項目)

  2. 讀取和存儲休息的一部分,一個POJO

  3. 如果字段「日期」是空的,我需要將默認值設置爲'xxxx-yy-zz'

我無法滿足第1個和第3個批次的要求 這裏是樣本閱讀器XML。請幫助

<bean id="reader" class="org.springframework.batch.item.file.FlatFileItemReader"> 
    <property name="resource" value="classpath:input/import" /> 
    <property name="encoding" value="UTF-8" /> 
    <property name="linesToSkip" value="1" /> 
    <property name="lineMapper" ref="line.mapper"/> 
</bean> 

<bean id="line.mapper" class="org.springframework.batch.item.file.mapping .DefaultLineMapper"> 
    <property name="lineTokenizer" ref="line.tokenizer"/> 
    <property name="fieldSetMapper" ref="fieldSet.enity.mapper"/> 
</bean> 

<bean id="line.tokenizer" class="org.springframework.batch.item.file.transfo rm.DelimitedLineTokenizer"> 
    <property name="delimiter"> 
     <util:constant static-field="org.springframework.batch.item.file.transfo rm.DelimitedLineTokenizer.DELIMITER_TAB"/> 
    </property> 
    <property name="names" value="id,date,age " /> 
    <property name="strict" value="false"/> 
</bean> 

    <bean id="fieldSet.enity.mapper" class="org.springframework.batch.item.file.mapping .BeanWrapperFieldSetMapper"> 
     <property name="targetType" value="a.b.myPOJO"/> 
     <property name="customEditors"> 
      <map> 
       <entry key="java.util.Date"> 
        <bean class="org.springframework.beans.propertyeditors.C ustomDateEditor"> 
          <constructor-arg> 
           <bean class="java.text.SimpleDateFormat"> 
             <constructor-arg value="yyyy-mm-dd" /> 
           </bean> 
          </constructor-arg> 
          <constructor-arg value="true" /> 
        </bean> 
       </entry> 
      </map> 
    </property> 

+0

如果驗證第一線失敗應該發生什麼創建自己的自定義FieldSetMapper?完全跳過文件? – 2013-03-15 08:23:10

回答

0

你認爲你應該做的日期ItemProcessor設置。

此外,如果<property name="linesToSkip" value="1" />不滿足您的要求 - 擴展FlatFileItemReader並手動驗證第一行。

+0

我打算使用另一個讀取器,它將讀取標題並驗證格式並退出。這就是爲什麼我給這個讀者。如果那不是一個正確的方法,那麼你是對的。我不應該跳過他一號線 – 2013-03-15 11:21:26

+0

設置日期,我可以做這樣的事情 <構造精氨酸> <構造精氨酸值=」 YYYY-MM-DD 「/> <構造精氨酸值=」 真 「/> <屬性名=」 值」的值= 「0000-00-00」/> – 2013-03-15 11:22:43

+0

沒有得到您的最新評論 – 2013-03-15 11:25:33

1

像下面

CustomeFieldSetMapper implements FieldSetMapper<a.b.myPOJO> { 

@Override 
public a.b.myPOJO mapFieldSet(FieldSet fs) { 
      a.b.myPOJO myPOJO = new a.b.myPOJO(); 
      if(fs.readString("date").isEmpty()){ 
       myPOJO.setDate("xxxx-yy-zz"); 
      } 
      return a.b.myPOJO; 
    } 
} 
相關問題