最近面临的问题是,使用多个< 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”的多个注释。有任何想法吗 ?
答案 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>