mag*_*lla 5 spring profiles spring-batch
最近面临的问题是,使用多个<beans>定义的spring 3.1启用的配置文件功能不适用于spring批次自有标记.
<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>
Run Code Online (Sandbox Code Playgroud)
运行测试示例(没有启用任何一个配置文件)spring抱怨找到id"job"的多个注释.有任何想法吗 ?
我遇到了同样的问题,那是因为 spring XML 验证器。正如您所知,当您创建 spring xml 文件时,spring 首先将此文件发送到 XML 解析器以验证它。
我的意思是你可以定义两个或多个具有相同 id 的 bean。然后你可以看到 spring XML 验证器解析你的 XML 文件没有任何问题。尽管在后期阶段,如果这些 bean 位于同一配置文件中或不在任何配置文件中,则 spring 本身会抛出异常。
但是在 Spring Batch 中,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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
717 次 |
| 最近记录: |