2012-06-22 86 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> 
相关问题