4

私は春のバッチに非常に新しいです。ヘッダー(フィールド名)レコードとデータレコードを持つファイルを読み取る必要があるという要件があります

  1. 最初のレコードを検証する必要があります(事前定義された名前のセットと一致するフィールド名を確認してください)-このレコードはスキップする必要があることに注意してください-つまり、プロセッサのアイテムの一部であってはなりません)

  2. 残りのフィールド値を読み取り、POJOに格納します

  3. フィールド「date」が空の場合、デフォルト値を「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>
4

2 に答える 2

2

以下のように独自のカスタム FieldSetMapper を作成します

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;
    } 
}
于 2013-04-17T07:39:57.867 に答える
1

で日付を設定する必要があると思いますItemProcessor

また、<property name="linesToSkip" value="1" />要件を満たしていない場合は、FlatFileItemReader最初の行を手動で拡張して検証します。

于 2013-03-15T08:43:44.480 に答える