Spring Batch 之 Sample(遊標方式讀寫DB資料表)(八)

來源:互聯網
上載者:User

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

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

      首先是讀操作:

 1 <bean:bean id="jdbcItemReader"
2 class="org.springframework.batch.item.database.JdbcCursorItemReader"
3 scope="step">
4 <bean:property name="dataSource" ref="dataSource" />
5 <bean:property name="sql"
6 value="select ID,USERID,USERNAME,PASSWORD from T_USER where id &lt; ?" />
7 <bean:property name="rowMapper">
8 <bean:bean class="org.springframework.jdbc.core.BeanPropertyRowMapper">
9 <bean:property name="mappedClass"
10 value="jp.co.necst.eqix.batch.jdbcTwoDest.pojo.User" />
11 </bean:bean>
12 </bean:property>
13 <bean:property name="preparedStatementSetter" ref="paramStatementSetter" />
14 </bean:bean>
15
16 <bean:bean id="paramStatementSetter"
17 class="org.springframework.batch.core.resource.ListPreparedStatementSetter"
18 scope="step">
19 <bean:property name="parameters">
20 <bean:list>
21 <bean:value>#{jobParameters['id']}</bean:value>
22 </bean:list>
23 </bean:property>
24 </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對象了,也就完成了讀操作。

      其次是寫操作:

 1 <bean:bean id="jdbcItemWriter"
2 class="org.springframework.batch.item.database.JdbcBatchItemWriter">
3 <bean:property name="dataSource" ref="dataSource" />
4 <bean:property name="sql"
5 value="insert into T_DESTUSER (ID,USERID,USERNAME,PASSWORD,UPDATETIME,UPDATEUSER)
6 values
7 (:id,:userId,:userName,:password,:updateDate,:updateUser)" />
8 <bean:property name="itemSqlParameterSourceProvider">
9 <bean:bean
10 class="org.springframework.batch.item.database.BeanPropertyItemSqlParameterSourceProvider" />
11 </bean:property>
12 </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的簡單操作就介紹完了。下次將和大家一起討論開發中遇到的一些進階特性和實際問題。

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.