2012-01-21 137 views
2

彈簧一批讀者我有一個轉換各種銀行對賬單到我的應用程序彈簧批處理作業。有一個不同的讀者對每個銀行對帳單類型,只有一個作家的全部。這項工作是非常簡單的 - 讀取,處理和寫入:動態地選擇在運行時

<batch:job id="importer" restartable="true"> 
    <batch:step id="import"> 
     <batch:tasklet> 
      <batch:chunk reader="reader" writer="writer" processor="processor" commit-interval="10" /> 
     </batch:tasklet> 
    </batch:step> 
</batch:job> 

現在,我想最終用戶提供的聲明文件,以及銀行的信息,然後在運行時選擇相應的彈簧一批讀者對這個工作運行。理想情況下這將是巨大的,如果我能預讀的第一步,並試圖第一個「猜測」銀行形式聲明格式。但我離題了。

是否有可能在運行之前它注入讀者進入一個工作嗎?還是有更好的方法來實現我的目標?步驟開始之前太


你嘗試移動閱讀器轉換和映射邏輯

回答

2

您可以從輸入參數/或化子性質文件中設置的讀者:

<batch:chunk reader="#{jobParameters['reader.beanId']}" writer="writer" processor="processor" commit-interval="10" /> 

你也可以考慮後期綁定工作和step屬性,在這裏從春季批次的鏈接step-scope

+0

我們試圖實現這個,但它似乎沒有工作(使用Spring批次3.0.4,它失敗在這一點上訪問jobParameters),我們將使用可能解決此2個不同步驟和決定因素。 – Dayde

1

的問題是,(文件)Itemreaders步驟開始之前構造,這意味着該文件將被打開處理器?你可以使用一個PassThroughLineMapper這個

<bean id="dumbItemReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step"> 
    <property name="resource" value="#{jobParameters['input.file']}" /> 
    <property name="lineMapper"> 
     <bean class="org.springframework.batch.item.file.mapping.PassThroughLineMapper" /> 
    </property> 
    <property name="strict" value="true" /><!-- optional --> 
</bean> 

另一種非常乾淨的解決方案可能與一個額外的前階段工作,以找到自己需要的讀者類型: