Spring Batch和Spring3.1配置文件

时间:2014-01-03 15:08:15

标签: spring spring-batch profiles

最近面临的问题是,使用多个< spring 3.1启用了配置文件功能。豆类>定义不适用于弹簧批自己的标签。

<beans profile="prod">
    <bean id ="test" class="java.lang.String"></bean>
    <batch:job id="job" abstract="true" >
     <batch:listeners>

        <batch:listener ref="jobExecutionContextDateSetter" />
        <batch:listener ref="jobStatusListener"/>
      </batch:listeners>
    </batch:job>
</beans>

<beans profile="dev">
    <bean id ="test" class="java.lang.String"></bean>
    <batch:job id="job" abstract="true" >
      <batch:listeners>
          <batch:listener ref="jobExecutionContextDateSetter" />
       </batch:listeners>
    </batch:job>
</beans>

运行测试示例(没有启用任何一个配置文件)spring抱怨找到id“job”的多个注释。有任何想法吗 ?

1 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,那是因为Spring XML验证器。如您所知,在创建spring xml文件时,首先会将此文件发送到XML解析器以验证它。

我的意思是你可以定义两个或多个具有相同id的bean。然后你可以看到spring XML验证器没有任何问题地解析你的XML文件。虽然在后面的阶段,如果这些bean处于相同的配置文件或任何配置文件之外,spring本身会抛出异常。

在春季批处理中,

,XML验证程序不允许具有两个具有相同ID的作业。

此解决方案是您可以从任何配置文件中定义批次,并在配置文件中定义其bean,如下所示:

<batch:job id="job1" abstract="true" job-repository="jobRepository">
        <batch:listeners>
            <batch:listener ref="jobListener"/>
        </batch:listeners>
</batch:job>

<beans profile="prod">
        <bean id="jobListener" class="com.batch.ProductionJobListener"/>
</beans>

<beans profile="dev">
    <bean id="jobListener" class="com.batch.DevelopmentJobListener"/>
</beans>