【问题标题】:spring batch: inject main application context @Component using AutomaticJobRegistrarspring batch:使用 AutomaticJobRegistrar 注入主应用程序上下文 @Component
【发布时间】:2014-06-23 10:10:10
【问题描述】:

我正在尝试将主应用程序上下文中定义的一些 @Service / @Repository bean 注入到 AutomaticJobRegistrar 加载的一些作业中。

<bean class="org.springframework.batch.core.configuration.support.AutomaticJobRegistrar">
        <property name="applicationContextFactories">
            <bean class="org.springframework.batch.core.configuration.support.ClasspathXmlApplicationContextsFactoryBean">
                <property name="resources" value="classpath*:/META-INF/jobs/*Job.xml" />
            </bean>
        </property>
        <property name="jobLoader">
            <bean class="org.springframework.batch.core.configuration.support.DefaultJobLoader">
                <property name="jobRegistry" ref="jobRegistry" />
            </bean>
        </property>
    </bean>

在我的ItemWriter 实现类中使用@Autowired 不要注入我的服务bean。

我必须在每个 *Job.xml 中启用组件扫描或声明每个 bean 以使注入工作,但注入的类与主应用程序上下文使用的实例不同。

如何获得在主应用程序上下文中声明的相同实例 bean?

感谢您的建议

【问题讨论】:

    标签: spring spring-batch


    【解决方案1】:

    您是否为每个作业激活了context:annotation-config

    如果为您需要激活的每个作业创建一个新的应用程序上下文,否则不会发生注释处理(包括@Autowired)。

    'context:component-scan' 也会激活 'context:annotation-config' 所以如果你激活它,这可能是@Autowired 工作的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-14
      • 2015-06-20
      • 2015-08-21
      • 1970-01-01
      • 2011-10-16
      • 2016-05-20
      相关资源
      最近更新 更多