ItemReaderについて説明します。
csvファイルはSpring Batchアプリケーションを実行するサーバに配置してください。
例1はcsvファイルの内容を直接渡す場合の例です。例2はcsvファイルの内容を指定して読み込む場合の例です。ItemReaderの設定とは別にPOJOクラスとFieldSetMapperクラスが必要です。指定した形式とは異なるデータが含まれていた場合、エラーを返します。例3は複数のCSVファイルを使用する場合の例です。
例
例1 csvファイルの内容を直接後プロセスに渡す場合
Job定義ファイル(job.xml):
<!-- ItemReader定義 --> <bean id="flatFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader"> <property name="resource" value="file:/csv/input.csv" /> <!-- lineMapperを行わないための設定 --> <property name="lineMapper"> <bean class="org.springframework.batch.item.file.mapping.PassThroughLineMapper" /> </property> </bean> |
例2 csvファイルの内容を指定して読み込む場合
POJOクラス(UserModel.java):
public class UserModel { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } |
FieldSetMapperクラス(UserFieldSetMapper.java):
… public class UserFieldSetMapper implements FieldSetMapper<UserModel> { public UserModel mapFieldSet(FieldSet fieldSet) { UserModel userModel = new UserModel(); userModel.setId(fieldSet.readInt("id")); userModel.setName(fieldSet.readString("name")); return userModel; } } |
Job定義ファイル(job.xml):
<!-- ItemReader定義 --> <bean id="flatFileItemReader " class="org.springframework.batch.item.file.FlatFileItemReader"> <property name="resource" value="file:/csv/input.csv" /> <!-- lineMapperの設定 --> <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="id, name" /> </bean> </property> <!-- FieldSetMapperの指定 --> <property name="fieldSetMapper"> <bean class="example.UserFieldSetMapper" /> </property> </bean> </property> </bean> |
例3 複数のCSVファイルを使用する場合
Job定義ファイル(job.xml):
<!-- MultiResourceItemReader定義 --> <bean id="multiResourceItemReader" class="org.springframework.batch.item.file.MultiResourceItemReader"> <!-- 正規表現を使用して複数ファイルを取得 --> <property name="resources" value="file:/csv/input*.csv" /> <!-- デリゲートするFileItemReaderの指定 --> <property name="delegate" ref="flatFileItemReader" /> </bean> <!-- ItemReader定義 --> <bean id="flatFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader"> <!-- MultiResourceItemReaderにてresource定義を行うため、resource定義は不要 --> <property name="lineMapper"> <bean class="org.springframework.batch.item.file.mapping.PassThroughLineMapper" /> </property> </bean> |
JDBCを使用したデータベース入力についての設定を以下に示します。
例
Job定義ファイル(job.xml):
<!-- ItemReader定義 --> <bean id="jdbcPagingItemReader" class="org.springframework.batch.item.database.JdbcPagingItemReader"> <!-- 入力データが格納されているデータソースを設定 --> <property name="dataSource" ref="jdbcDataSource" /> <!-- 各種DB用のクエリ生成機能設定 --> <property name="queryProvider"> <bean class="org.springframework.batch.item.database.support.OraclePagingQueryProvider"> <property name="selectClause" value="select *" /> <property name="fromClause" value=" USERTABLE" /> <property name="sortKeys"> <map> <entry key="id" value="ASCENDING" /> </map> </property> </bean> </property> <!-- Mapper用クラスを設定 --> <property name="rowMapper"> <bean class="org.springframework.jdbc.core.BeanPropertyRowMapper"> <property name="mappedClass" value="example.model.UserModel" /> </bean> </property> </bean> |
ポイント
Hibernateの設定方法については、“オープンJavaフレームワークユーザーズガイド Java EE 7編”の“3.3.3.4 O/Rマッピング連携(Hibernate)”を参照してください。
Hibernateを使用したデータベース入力についての設定を示します。
例
Job定義ファイル(job.xml):
<!-- ItemReader定義 --> <bean id=" hibernatePagingItemReader" class="org.springframework.batch.item.database.HibernatePagingItemReader"> <!-- 入力データが格納されているデータソースを設定 --> <property name="dataSource" ref="hibernateDataSource" /> <!-- セッションファクトリを設定 --> <property name="sessionFactory" ref="sessionFactory" /> <!-- Hibernate Query Language(HQL)のfrom句にてエンティティクラスを指定 --> <property name="queryString" value="from example.model.UserModel" /> </bean> |
ポイント
JPAの設定方法については、“オープンJavaフレームワークユーザーズガイド Java EE 7編”の“3.3.3.5 O/Rマッピング連携(JPA)”を参照してください。
JPAを使用したデータベース入力についての設定を示します。
例
Job定義ファイル(job.xml):
<!-- ItemReader定義 --> <bean id="jpaPagingItemReader" class="org.springframework.batch.item.database.JpaPagingItemReader"> <!-- 入力データが格納されているデータソースを設定 --> <property name="dataSource" ref="jpaDataSource" /> <!-- エンティティマネージャファクトリを指定 --> <property name="entityManagerFactory" ref="entityManagerFactory" /> <!-- Java Persistence Query Language(JPQL)のfrom句にてエンティティクラスを指定 --> <property name="queryString" value="from example.model.UserModel" /> </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" /> <!-- ItemReader定義 --> <bean id="mybatisPagingItemReader" class="org.mybatis.spring.batch.MyBatisPagingItemReader"> <!-- 入力データが格納されているデータソースを設定 --> <property name="dataSource" ref="mybatisDataSource" /> <!-- セッションファクトリを設定 --> <property name="sqlSessionFactory" ref="sqlSessionFactory" /> <!-- 入力用メソッドを指定 --> <property name="queryId" value="example.mapper.SQLMapper.getUser" /> </bean> |
MyBatisPagingItemReaderを使用する場合は、読み込んだページ番号をわたす必要があります。読み込んだページ番号をわたすSQL文はデータベースによって異なります。以下に例を示します。
例
Symfoware Server (Postgres)の場合(SQLMapper.java):
… // Mapperインターフェース public interface SQLMapper { // Symfoware Server (Postgres)用のSQL文 @Select("SELECT id, name FROM TESTTABLE ORDER BY id ASC LIMIT #{_pagesize} OFFSET #{_skiprows}") UserModel getUser(); } |
Oracleの場合(SQLMapper.java):
… // Mapperインターフェース public interface SQLMapper { // Oracle用のSQL文 @Select("select * from (select * from (SELECT id, name, ROWNUM ROWNUM_ FROM TESTTABLE T ORDER BY id) WHERE ROWNUM_ > ( #{_page} * #{_pagesize} )) WHERE ROWNUM <= #{_pagesize}") UserModel getUser(); } |