前面关于Spring Batch的文章,讲述了SpringBatch对Flat、XML等文件的读写操做,本文将和你们一块儿讨论Spring Batch对DB的读写操做。Spring Batch对DB数据的读取操做提供两种形式,一种是以游标为基础,一条条的读取数据;另一种是分页的方式读取DB。html
经过前面文章的讲解,你们应该对SpringBatch的框架和基本配置有了必定的了解。为了避免显得啰嗦,本文只提供读取DB方式的核心配置,一些辅助信息的配置,若是不明白,能够参照前面几讲的内容。spring
首先是读操做:sql
class="org.springframework.batch.item.database.JdbcCursorItemReader"
scope="step">
<bean:property name="dataSource" ref="dataSource" />
<bean:property name="sql"
value="select ID,USERID,USERNAME,PASSWORD from T_USER where id < ?" />
<bean:property name="rowMapper">
<bean:bean class="org.springframework.jdbc.core.BeanPropertyRowMapper">
<bean:property name="mappedClass"
value="jp.co.necst.eqix.batch.jdbcTwoDest.pojo.User" />
</bean:bean>
</bean:property>
<bean:property name="preparedStatementSetter" ref="paramStatementSetter" />
</bean:bean>
<bean:bean id="paramStatementSetter"
class="org.springframework.batch.core.resource.ListPreparedStatementSetter"
scope="step">
<bean:property name="parameters">
<bean:list>
<bean:value>#{jobParameters['id']}</bean:value>
</bean:list>
</bean:property>
</bean:bean>
Spring Batch对DB基于游标的读取数据操做,是由其核心类JdbcCursorItemReader来实现的。通常来讲,从DB数据表中读取数据通常有如下几个步骤。首先是DB链接,这些链接DB的基本信息(像DB服务器地址、用户名、密码等信息)由dataSource属性提供,SpringBatch没有提专门供特殊的类,用的是Spring框架的DataSource。链接上了DB,下面须要关注的就是对DB具体的查询操做了,也就是SQL文的相关信息了,由其sql属性实现,主要是拼接SQL文的一个字符串。有了sql文,有可能须要传递参数,sql文参数的一些信息,由preparedStatementSetter属性来知足,具体的实现能够由SpringBatch提供的核心类ListPreparedStatementSetter来设置,如代码的16-24行。链接上了DB,执行了SQL文,最后要关心的就是查询结果的存放问题了,这一点由JdbcCursorItemReader的rowMapper属性来实现,如代码的7-12行。这样就能够将DB数据表中的数据一条条映射成咱们的Pojo对象了,也就完成了读操做。服务器
其次是写操做:app
<bean:bean id="jdbcItemWriter"
class="org.springframework.batch.item.database.JdbcBatchItemWriter">
<bean:property name="dataSource" ref="dataSource" />
<bean:property name="sql"
value="insert into T_DESTUSER (ID,USERID,USERNAME,PASSWORD,UPDATETIME,UPDATEUSER)
values
(:id,:userId,:userName,:password,:updateDate,:updateUser)" />
<bean:property name="itemSqlParameterSourceProvider">
<bean:bean
class="org.springframework.batch.item.database.BeanPropertyItemSqlParameterSourceProvider" />
</bean:property>
</bean:bean>
写DB和读DB思路是同样的,只不过一个是从DB里读,一个是往DB里写。是由SpringBatch框架的JdbcBatchItemWriter类实现的。也有如下几个步骤:首先是链接DB,也是由dataSource属性提供;其次是执行的SQL文,有sql属性知足,最后就是如何传递参数了。写操做传递参数的时候,跟读操做有必定区别。写操做提供两种传递参数的方式:一种是直接传递一个对象进去,如上述代码8-11行所示,itemSqlParameterSourceProvider属性设置为BeanPropertyItemSqlParameterSourceProvider的实现就能够了。SQL文中的参数也是使用【:对象属性名】的方式,如上述代码的7行所示,而且区分大小写。第二种传递参数的方式是:设置JdbcBatchItemWriter类的itemSqlParameterSourceProvider属性(设置方式与读操做的paramStatementSetter属性的设置方式大同小异),固然,sql也和第一种方式有区别,使用以下形式:insert into T_DESTUSER (ID,USERID,USERNAME,PASSWORD,UPDATETIME,UPDATEUSER) values (?,?,?,?,?,?).两种方式各有优点,根据实际状况自行选择。框架
至此,SpringBatch读写DB的简单操做就介绍完了。下次将和你们一块儿讨论开发中遇到的一些高级特性和实际问题。ide