Java
spring-batch
SpringBoot
FlatFileItemWriter

Spring-Batch FlatFileItemWriterの使い方

More than 1 year has passed since last update.

Spring-BatchにおけるFlatFileItemWriterの実装方法に関して、ググッても全く出てこなかったので仕方なくライブラリのソースを読みつつ実装したので以下に残す。

SampleAggregator.java
public class SampleAggregator implements LineAggregator<SampleInputDto>{

    @Override
    public String aggregate(SampleInputDto item) {
        StringBuilder sb = new StringBuilder();
        sb.append(item.getParam1());
        sb.append(",");
        sb.append(item.getParam2());
        sb.append(",");
        sb.append(item.getParam3());
        return sb.toString();
    }
}
SampleBatchConfiguration.java
    @Bean
    public FlatFileItemWriter<SampleOutputDto> writer() {
        FlatFileItemWriter<SampleOutputDto> writer = new FlatFileItemWriter<SampleOutputDto>();
        writer.setResource(new FileSystemResource("C:¥tenp¥sample-data.csv"));
        writer.setLineAggregator(new SampleAggregator()); 
        return writer;
    }

はまったのは、以下の1点。

LineAggregatorインターフェースをimplementsして、aggregateメソッドを@OverrideしたクラスのインスタンスをsetLineAggregator()で設定しないと(確か)IllegalArgumentExceptionが発生する

@Overrideするaggreageteメソッドの実装内容は、引数に入力のPOJOが渡されるので、ファイルの1行出力内容をString型で返却してやれば良い。

■補足
Java8ならラムダ式が使えるので、いちいちSampleAggregatorクラスを実装するのが面倒くさい場合、以下のようにも書ける。

SampleBatchConfiguration.java
    @Bean
    public FlatFileItemWriter<SampleOutputDto> writer() {
        FlatFileItemWriter<SampleOutputDto> writer = new FlatFileItemWriter<SampleOutputDto>();
        writer.setResource(new FileSystemResource("C:¥tenp¥sample-data.csv"));
        writer.setLineAggregator(item -> {
                StringBuilder sb = new StringBuilder();
            sb.append(item.getParam1());
            sb.append(",");
            sb.append(item.getParam2());
            sb.append(",");
            sb.append(item.getParam3());
            return sb.toString();
        });
        return writer;
    }

以下参考
http://www.mybatis.org/spring/ja/batch.html