ItemWriterについて説明します。
例1は渡されたデータをcsvファイルに直接出力する場合の例です。例2は内容を指定してcsvファイルに出力する場合の例です。指定した形式とは異なるデータが含まれていた場合、エラーを返します。例3は1000行ごとに新しいcsvファイルに結果を出力する場合の例です。複数のcsvファイルに出力するためには、MultiResourceItemWriter を使用します。MultiResourceItemWriterを使用して複数のcsvファイルに出力をする場合は、SuffixCreatorクラスを作成する必要があります。
例
例1 渡されたデータをcsvファイルに直接出力する場合
Job定義ファイル(job.xml):
<!-- ItemWriter定義 --> <bean id="fileItemWriter" class="org.springframework.batch.item.file.FlatFileItemWriter"> <!-- csvファイルの出力先ファイルパスを指定 --> <property name="resource" value="file:/csv/input.csv" /> <!-- lineAggregatorを行わないための設定 --> <property name="lineAggregator"> <bean class="org.springframework.batch.item.file.transform.PassThroughLineAggregator" /> </property> </bean> |
例2 内容を指定してcsvファイルに出力する場合
Job定義ファイル(job.xml):
<!-- ItemWriter定義 --> <bean id="flatFileItemWriter" class="org.springframework.batch.item.file.FlatFileItemWriter"> <property name="resource" value="file:/csv/output.csv" /> <!-- lineAggregatorの設定 --> <property name="lineAggregator"> <bean class="org.springframework.batch.item.file.transform.DelimitedLineAggregator"> <!-- FieldExtractorの設定 --> <property name="fieldExtractor"> <bean class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor"> <property name="names" value=" id, name, age" /> </bean> </property> </bean> </property> </bean> |
例3 複数のcsvファイルに出力する場合
SuffixCreatorクラス(OutputFileSuffixCreator.java):
… // SuffixCreatorクラス public class OutputFileSuffixCreator implements ResourceSuffixCreator { public String getSuffix(int arg0) { // 引数 + ”.csv”を返却 return arg0 + ".csv"; } } |
Job定義ファイル(job.xml):
<!-- SuffixCreatorクラスを定義 --> <bean id="outputfileSuffixCreator" class="example.OutputFileSuffixCreator" /> <!-- MultiResourceItemWriter定義 --> <bean id="multiResourceItemWriter " class="org.springframework.batch.item.file.MultiResourceItemWriter"> <property name="resource" value="file:/csv/output" /> <!-- SuffixCreatorクラスの指定 --> <property name="resourceSuffixCreator" ref="outputfileSuffixCreator " /> <!-- 1000行ごとに新しいファイルを作成 --> <property name="itemCountLimitPerResource" value="1000" /> <!-- デリゲートするFileItemWriterの指定 --> <property name="delegate" ref="flatFileItemWriter" /> </bean> <!-- ItemWriter定義 --> <bean id="flatFileItemWriter" class="org.springframework.batch.item.file.FlatFileItemWriter"> <!-- MultiResourceItemWriterにて"resource"定義を行うため、"resource"定義は不要です --> <property name="lineAggregator"> <bean class="org.springframework.batch.item.file.transform.PassThroughLineAggregator" /> </property> </bean> |
JDBCを使用したデータベース出力についての設定を以下に示します。
例
Job定義ファイル(job.xml):
<!-- ItemWriter定義 --> <bean id="jdbcBatchItemWriter" class="org.springframework.batch.item.database.JdbcBatchItemWriter"> <!-- データを出力するデータソースを設定 --> <property name="dataSource" ref="jdbcDataSource" /> <!-- データ追加用SQL文の設定 --> <property name="sql" value="insert into TESTTABLE(ID,NAME) values (:id, :name)" /> <!-- ItemSqlParameterSourceProviderの設定 --> <property name="itemSqlParameterSourceProvider"> <bean class="org.springframework.batch.item.database.BeanPropertyItemSqlParameterSourceProvider" /> </property> </bean> |
ポイント
Hibernateの設定方法については、“オープンJavaフレームワークユーザーズガイド Java EE 7編”の“3.3.3.4 O/Rマッピング連携(Hibernate)”を参照してください。
Hibernateを使用したデータベース出力についての設定を示します。
例
Job定義ファイル(job.xml):
<!-- ItemWriter定義 --> <bean id="databaseItemWriter" class="org.springframework.batch.item.database.HibernateItemWriter"> <!-- データを出力するデータソースを設定 --> <property name="dataSource" ref="hibernateDataSource" /> <!-- セッションファクトリを設定 --> <property name="sessionFactory" ref="sessionFactory" /> </bean> |
ポイント
JPAの設定方法については、“オープンJavaフレームワークユーザーズガイド Java EE 7編”の“3.3.3.5 O/Rマッピング連携(JPA)”を参照してください。
JPAを使用したデータベース出力についての設定を示します。
例
Job定義ファイル(job.xml):
<!-- ItemWriter定義 --> <bean id="databaseItemWriter" class="org.springframework.batch.item.database.JpaItemWriter"> <!-- データを出力するデータソースを設定 --> <property name="dataSource" ref="jpaDataSource" /> <!-- エンティティファクトリを指定 --> <property name="entityManagerFactory" ref="entityManagerFactory" /> </bean> |
ポイント
MyBatisの設定方法については、“オープンJavaフレームワークユーザーズガイド Java EE 7編”の“3.3.3.6 O/Rマッピング連携(MyBatis)”を参照してください。
MyBatisを使用したデータベース出力についての設定を示します。
例
Job定義ファイル(job.xml):
<!-- Mapperインターフェースを指定 --> <mybatis-spring:scan base-package="example.mapper" /> <!-- ItemWriter定義 --> <bean id="databaseItemWriter" class="org.mybatis.spring.batch.MyBatisBatchItemWriter"> <!-- データを出力するデータソースを設定 --> <property name="dataSource" ref="mybatisDataSource" /> <!-- セッションファクトリを設定 --> <property name="sqlSessionFactory" ref="sqlSessionFactory" /> <!-- 出力用メソッドを指定 --> <property name="statementId" value="example.mapper.UserMapper.insertUser" /> </bean> |