2016-08-22 79 views
2

我正在嘗試使用Spring批處理框架編寫作業。作業需要從集羣化的db2數據庫獲取數據,在每個獲取的記錄上調用一些邏輯,然後將轉換後的數據存儲在相同的數據庫中(與讀取數據的位置不同)。我想寫step1如下,用於分佈式DB2數據庫的Spring批處理讀取器

@Bean 
    public Step step1(StepBuilderFactory stepBuilderFactory, 
      ItemReader<RemittanceVO> reader, ItemWriter<RemittanceClaimVO> writer, 
      ItemProcessor<RemittanceVO, RemittanceClaimVO> processor) { 

     return stepBuilderFactory.get("step1") 
       .<RemittanceVO, RemittanceClaimVO> chunk(100).reader(reader) 
       .processor(processor).writer(writer).build(); 
    } 

目前,我面臨兩個挑戰,因爲數據庫是DB2和正在聚集,

SQLS在提供元數據 - /org/springframework/batch/core/schema-db2.sql不適用於分佈式DB2的 。它在命令上失敗,constraint JOB_INST_UN unique (JOB_NAME, JOB_KEY)

在這個文件中寫入的查詢可能是 調整爲分佈式db2或我也可以手動創建表,但我是 不確定是否應手動創建表?如果這會有一些進一步的併發症?

我需要所有這些表,因爲我想使用Spring批處理,因爲它的PAUSE,RESTART功能。

2.

我們需要解僱所有SELECT查詢DB2上與 READ ONLY WITH URSO question。 如果我們不用這個關鍵字運行查詢,db可以被鎖定。

問題點#2是我不能在Spring Batch的構建閱讀器類(JdbcPagingItemReader等)中使用,因爲那些不支持此db2特定關鍵字。

通過閱讀互聯網上無用的簡單例子,解釋了這個框架的優點,我認爲我會在很短的時間內啓動並運行,但它看起來我必須編寫自己的查詢提供程序類,研究元數據sqls和什麼如果db恰好是DB2並且是分佈式的,那麼不是。

有沒有人實現了分佈式Db2數據庫的類似工作,並指導我以上幾點?

回答

0

我想,爲了解決第一點,我會手動創建表格,因爲我已經在another question中確認表格不會自動丟失,因此不需要重新創建。一次手動活動應該足夠了。

,我將通過指定的交易水平,使WITH UR在SELECT查詢將不再需要隔離級別解決點#2,

@Autowired 
    private DataSource dataSource; 
    @Bean 
     public TransactionTemplate transactionTemplateUR(){ 
      TransactionTemplate txnTemplate = new TransactionTemplate(); 
      txnTemplate.setIsolationLevelName("ISOLATION_READ_UNCOMMITTED"); 
      txnTemplate.setTransactionManager(txnManager); 
      return txnTemplate; 
     } 

     @Bean 
     public PlatformTransactionManager txnManager(DataSource dataSource){ 
      DataSourceTransactionManager txnManager = new DataSourceTransactionManager(); 
      txnManager.setDataSource(dataSource); 
      return txnManager; 
     } 
+0

您的點#2的解決方案是不好的,因爲你會得到不一致數據如果發生回滾。因此,您應該使用org.springframework.batch.item.database.support.Db2PagingQueryProvider作爲起點並根據您的要求對其進行修改。 – Dmitry

相關問題