spring batch 以遊標的方式 數據庫讀取數據 而後寫入目標數據庫

      前面關於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 &lt; ?" />
<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

相關文章
相關標籤/搜索