2015-06-12 20 views
0

我嘗試從一個表中讀取數據並使用spring批處理寫入其他表,但現在我的要求是從多個表中讀取數據並寫入文件,所以我們可以通過定義多個工作來實現這個目標,但是我想使用單個工作來完成這個工作意味着單個閱讀器和單個作者以及單個處理器。如何使用彈簧批從db中的多個表中讀取數據

請爲我提供一些參考資料。

+0

您可以使用SpringBatch的「CompositeWriter」,請參閱http://stackoverflow.com/questions/15805868/how-to-insert-data-into-multiple-tables-through-itemwriter – Shailendra

+0

好的,但我們應該用於閱讀器從多個表中讀取 – User111

+0

您正在使用哪種閱讀器?我用MyBatis閱讀器綁定了一個sql,它從多個表中讀取數據。 – songyuanyao

回答

0

Spring批處理提供的類不可能,但您可以通過我們的方式實現它。
就在chunk處理之前,添加一個步驟,創建一個自定義的tasklet,您將在其中分配不同的sql和不同的輸出文件,並且只要有sqls執行就可以讓它們在循環中運行。
這聽起來很難,但我已經在相同的情況下工作,下面是一些想法,你如何能做到這一點 -

<flow id="databaseReadWriteJob"> 
      <step id="step1_setReaderWriter"> 
       <tasklet ref="setReaderWriter" /> 
       <next on="FAILED" to="" /> 
       <next on="*" to="dataExtractionStep" /> 
      </step> 
      <step id="dataExtractionStep"> 
       <tasklet> 
        <chunk reader="dbReader" writer="flatFileWriter" commit-interval="${commit-interval}" /> 
</tasklet> 
       <next on="FAILED" to="" /> 
       <next on="*" to="step3_removeProcessedSql" /> 
      </step> 
      <step id="step3_removeProcessedSql"> 
       <tasklet ref="removeProcessedSql" /> 
       <next on="NOOP" to="step1_setReaderWriter" /> 
       <next on="*" to="step4_validateNumOfSuccessfulSteps" /> 
      </step> 
    </flow> 

這裏是setReaderWriter

<beans:bean id="setReaderWriter" class="SetReaderWriter"> 
     <beans:property name="reader" ref="dbReader" /> 
     <beans:property name="flatFileWriter" ref="flatFileWriter" /> 
     <beans:property name="fileSqlMap" ref="jobSqlFileMap" /> 
     <beans:property name="fileNameBuilder" ref="localFileNameBuilder" /> 
     <beans:property name="sourceFolder" value="${dataDir}" /> 
     <beans:property name="dateDiff" value="${dateDiff}" /> 

任何你需要的bean在Reader或Writer中動態添加。上面的sqlMap是sql作爲鍵和輸出文件作爲值的映射。
我希望它可以幫助。

+0

你能否詳細解釋我我無法理解這一點。 – User111

相關問題