2017-04-24 14 views
0

私は以下のようにBeanクラスを持っている -Springバッチ - 単一レコードを処理した後に複数行を書き込む方法は?

public class Account { 
    private String strAccNumber = ""; 

    private List<Account> accountList = new ArrayList<Account>(); 

    // getter setter 
.... 
... 
@Override 
    public String toString() { 
     // code for PassThroughLineAggregator 
     String data=""; 
        for (int j=0; j<accountList.size(); j++) { 
      Account bean = accountList.get(j); 
      data = data + bean.getStrAccNumber(); 
      if (j<(accountList.size()-1)) { 
       data = data + "\n"; 
           }  
     } 
     return data; 
    } 
} 

私は私のconfigファイルでaccountListを設定したいデータを書き込みます。 以下のコードを使用してBeanプロパティを設定しています。

<bean id="flatFileReader" class="org.springframework.batch.item.file.FlatFileItemReader" 
    scope="step"> 
    <property name="resource" value="classpath:springBatch.csv" /> 
    <property name="strict" value="false"></property> 
    <property name="linesToSkip" value="1" /> 
    <property name="lineMapper"> 
     <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper"> 
      <property name="lineTokenizer"> 
       <bean 
        class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer"> 
        <property name="names" value="ACC#" /> 
       </bean> 
      </property> 
      <property name="fieldSetMapper"> 
       <bean 
        class="com.abc.reader.AccountDetailsFieldSetMapper" /> 
      </property> 
     </bean> 
    </property> 
</bean> 
<bean id="flatFileProcessor" 
    class="com.abc.processor.AccountItemProcessor" 
    scope="step"></bean> 
<bean id="flatFileWriter" 
     class="com.abc.FlatFileItemWriterListener" 
     scope="step"> 
     <property name="resource" value="classpath:springBatch1.csv" /> 

     <property name="lineAggregator"> 
      <bean class="org.springframework.batch.item.file.transform.DelimitedLineAggregator"> 
       <property name="fieldExtractor"> 
        <bean class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor"> 
         <property name="names" value="strAccNumber" /> 
        </bean> 
       </property> 
      </bean> 
     </property> 

    </bean> 

AccountItemProcessor -

public class AccountItemProcessor implements ItemProcessor<Account, List<Account>>{ 

@Override 
public List<Account> process(Account accObj) throws Exception { 
    // logic.. 
} 

の工程で単一のレコードを処理した後、私はArrayListのを使用して、一度に複数の項目を書き込むことができますどのように複数の項目(項目のリスト)を、書きたいです。私の場合、私はaccountlistからデータを書きたいと思う。

+0

あなたのReaderおよびプロセッサについて教えてください。私たちはWriterにとって最良の選択肢が何かを見ていきます。 –

+0

@NghiaDo:更新されたコードをごらんください –

答えて

0

独自のLineAggregatorを実装したいと思うでしょう。これは、Stringがファイルに書き込まれるようにするものです。あなたの場合、実際には複数の行であるStringを返します。

あなたがここに文書でLineAggregatorインターフェース詳細を読むことができます:http://docs.spring.io/spring-batch/apidocs/org/springframework/batch/item/file/transform/LineAggregator.html

+0

私はPassThroughLineAggregatorを試しましたが、xls –

+0

で空白になっています。このユースケースのために独自に実装する必要があります。 –

+0

はい。PassThroughLineAggregatorを使用していますが、データに次の行(\ n)のデータが含まれていて、次の行のcsvに書き込む場合に問題が発生します –

関連する問題