Spring Batch 和 Spring3.1 配置文件

标签 spring spring-batch profiles

最近遇到了使用多个 < 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>

运行测试示例(不启用任一配置文件)spring 会提示为 id“job”找到了多个注释。有任何想法吗 ?

最佳答案

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

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

但是 在 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>

关于Spring Batch 和 Spring3.1 配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20906601/

相关文章:

jquery - 您如何使用 jquery 更新选择的所有选项

javascript - 如何声明配置文件变量并将其集成到JS文件中?如何排除/包含构建功能?

ios - 我如何处理我已经接管的项目的分配?

java - 使用 Spring + Thymeleaf 时出现 java.lang.StackOverflowError

Spring Data JPA 无法调用 JtaTransactionManager

线程中的 spring 安全当前用户

spring-batch - 带有注释的 Spring 批处理

java - 如何在一项作业执行中停止 Spring 编写器

java - SqlPagingQueryProviderFactoryBeanhaving 子句

c++ - 如何远程检索 Windows 配置文件目录路径?