spring batch 以游標的方式 數據庫讀取數據 然后寫入目標數據庫


      前面關於Spring Batch的文章,講述了SpringBatch對Flat、XML等文件的讀寫操作,本文將和大家一起討論Spring Batch對DB的讀寫操作。Spring Batch對DB數據的讀取操作提供兩種形式,一種是以游標為基礎,一條條的讀取數據;另外一種是分頁的方式讀取DB。

      通過前面文章的講解,大家應該對SpringBatch的框架和基本配置有了一定的了解。為了不顯得啰嗦,本文只提供讀取DB方式的核心配置,一些輔助信息的配置,如果不明白,可以參照前面幾講的內容。

      首先是讀操作:

          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對象了,也就完成了讀操作。

      其次是寫操作:

 
  <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的簡單操作就介紹完了。下次將和大家一起討論開發中遇到的一些高級特性和實際問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM