如何从spring批处理管理上下文访问FormattingConversionServiceFactoryBean

时间:2015-02-10 00:31:27

标签: spring spring-mvc spring-batch spring-batch-admin

我有一个spring mvc web应用程序,在父上下文(spring-application-context.xml)中注册了FormattingConversionServiceFactoryBean。

在我的父上下文中,我有一个FormattingConversionServiceFactoryBean,定义如下......

@Component("applicationConversionService")
public class ApplicationConversionServiceFactoryBean extends 
FormattingConversionServiceFactoryBean {

它在我的父上下文中加载如下......

<context:component-scan base-package="com.myCompany.reporting.converter" />

我在我的child / servlet上下文中使用它,如下所示......

<mvc:annotation-driven conversion-service="applicationConversionService"/>  

然后在我的控制器中我可以使用...

抓住这个bean
@Autowired
private ApplicationConversionServiceFactoryBean applicationConversionService;

到目前为止一切顺利。

我现在有一个案例,我想在我的一个Spring批处理作业bean中使用这个转换工厂服务bean。作业bean在spring批处理管理控制台批处理作业覆盖文件中定义。我试图将转换服务bean从我的父上下文自动装入我的jdbc writer。编译工作,但自动装配的转换服务在运行时始终为null。这是我如何自动装配。

public class BulletinBarUpdateItemWriter extends AbstractDao implements ItemWriter<Map<String,String>> {

    @Autowired
    private ApplicationConversionServiceFactoryBean applicationConversionService;

这是否与Spring批处理管理bean在不同的上下文中有关,这与我的web.xml中定义了spring batch admin servlet的方式有关?见下文......

<servlet>
    <servlet-name>Batch Servlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
           classpath*:/org/springframework/batch/admin/web/resources/servlet-config.xml,
           classpath*:/org/springframework/batch/admin/web/resources/webapp-config.xml</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
</servlet>

在我的spring批处理作业bean中访问conversionService bean的正确方法是什么?我想在我的Spring批处理作业bean中使用它,就像我在控制器中一样。

如前所述,我的Jdbc writer bean在spring batch admin batch jobs目录下的job.xml文件中定义,如下所示。

<bean id="bulletinBarUpdateItemWriter" 
    class="com.mycompany.reporting.dao.itemwriter.BulletinBarUpdateItemWriter" 
    parent="abstractCustDbJdbcDao"/>

1 个答案:

答案 0 :(得分:0)

我找到了答案。我需要将以下内容添加到我的job.xml文件

<!-- ====================================================================== -->
<!-- activate annotations for beans already registered in the               -->
<!-- application context.                                                   -->
<!-- ====================================================================== --> 
<context:annotation-config/>

在尝试将其放入我的作业文件之前,我没有成功地将它放在spring批处理管理覆盖文件中。将其移动到作业文件后,正在拾取注释。

非常奇怪,我想找到答案为什么你要做很多我不想做的挖掘工作。希望这有助于其他人。