2012-06-22 84 views
4

我很喜歡使用Spring-batch 2.1.8.RELEASE命名Spring批處理約定。Spring批處理多個作業中的相同步驟名稱?

的主要問題:

2不同的工作,但與同一步驟內(這將讓不同的屬性),這名字是不是唯一的。如果我嘗試運行其中一個作業,例如job1。然後它爲prop2獲得值「file2」,即使它是爲job2定義的。 (只是一個抽象的例子,沒有太多的步驟,聽衆等細節。)無法找出該過程的任何規律性或原因。

<batch:job id="job1" parent="parentJob"> 
    <batch:step id="copyFile"> 
     <batch:tasklet> 
      <bean class="xxx.xyz.classXXX" 
       scope="step"> 
       <property name="prop1" 
        value="file1" /> 
      </bean> 
     </batch:tasklet> 
    </batch:step> 
</batch> 

每個作業都在自己的文件中定義。

<batch:job id="job2" parent="parentJob"> 
    <batch:step id="copyFile"> 
     <batch:tasklet> 
      <bean class="xxx.xyz.classXXX" 
       scope="step"> 
       <property name="prop2" 
        value="file2" /> 
      </bean> 
     </batch:tasklet> 
    </batch:step> 
</batch> 

我們得到了大約80個工作 - 每個工作都有copyFile作爲第一步。但每項工作中也有一些步驟,應該平等命名。有沒有可能避免注射混亂/失敗?除了命名,如「copyFile1」,「copyFile2」等措施..

(名稱和屬性都不過是霧裏看花!)

你需要任何進一步的信息?希望我的解釋不是太糟糕。先謝謝你!

Cheers max。

回答

0

你有兩個匿名bean可以互相重疊,因爲他們沒有id屬性集,雖然他們有相同的類。

由於有不同的參數不區分你的豆,他們被覆蓋。

只需將id屬性添加到您的bean中即可解決您的問題。

<bean id="file1" class="xxx.xyz.classXXX" 
     scope="step"> 
     <property name="prop1" 
      value="file1" /> 
    </bean> 

希望這有助於...

+0

,這是不能工作。仍然與tasklets上的id相同。 – maxhax

3

顯然步驟ID是在春季批次全球(選中今天)。它們在上下文創建時被加載到地圖中,並且由於它們具有相同的ID,所以讀取的是最後一次獲勝的步驟。

解決方法此功能:使用不同的步的ID,例如用一個前綴等於批次:作業ID是這樣的:

<batch:job id="job1" parent="parentJob"> 
    <batch:step id="job1_copyFile"> 
    <batch:tasklet> 
     <bean class="xxx.xyz.classXXX" scope="step"> 
     <property name="prop1" value="file1" /> 
     </bean> 
    </batch:tasklet> 
    </batch:step> 
</batch> 

<batch:job id="job2" parent="parentJob"> 
    <batch:step id="job2_copyFile"> 
    <batch:tasklet> 
     <bean class="xxx.xyz.classXXX" scope="step"> 
     <property name="prop2" value="file2" /> 
     </bean> 
    </batch:tasklet> 
    </batch:step> 
</batch> 
相關問題