【问题标题】:Spring Batch and Spring3.1 profilesSpring Batch 和 Spring3.1 配置文件
【发布时间】:2014-01-21 07:07:53
【问题描述】:

最近遇到的问题是使用多个定义的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>

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

【问题讨论】:

  • 你有没有找到解决这个问题的方法?我也有同样的问题。
  • 还没有。为我的情况做了一个解决方法 - 对于开发人员,我在开发配置文件中创建“stubJobStatusListener”作为侦听器的存根实现。并且有 个配置文件。

标签: spring spring-batch profiles


【解决方案1】:

我遇到了同样的问题,那是因为 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>

【讨论】:

    猜你喜欢
    • 2015-01-30
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    • 2013-07-26
    • 2012-08-27
    • 2021-09-08
    • 2014-02-25
    • 1970-01-01
    相关资源
    最近更新 更多