@Configuration bean没有先加载

时间:2015-02-01 07:57:22

标签: spring spring-batch

我有一个@Configuration bean,用于定义Java中的各种bean

@Configuration
public class jmsConfiguration {
   // Various @Bean definitions
}

我也有下面的豆子:

@Component
@Profile({"BATCH_MODE"})
public class BatchLauncher  {

    @Autowired
    private Launcher launcher;

    @PostConstruct
    public void init(){
       launcher.launch();
       // The launcher bean encapsulates the logic to
       // get the Spring Batch JobLauncher bean,
       // build the job parameters and start the job
    }
}

问题在于: 获取init() bean并启动批处理作业的Launcher方法在 @Configuration类初始化之前称为。 如果代码launcher.launch()被注释掉并且应用程序在调试中运行,则调试器将停止在构造各种@Bean的代码中。但是,当launcher.launch()存在且运行时,该代码将首先运行,这意味着ItemWriter所依赖的bean尚未正确初始化。

这是用于启动Spring上下文的代码:

GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
ctx.load("app-context.xml");
ctx.getEnvironment().getPropertySources().addLast(propertySource);
ctx.refresh();
ctx.start();

这就是用XML定义Launcher bean的方法:

<context:component-scan base-package="com.company.app" />
<beans>
       <bean id="launcher" class="com.company.Launcher" />
...
</beans>

解决这个问题的最佳方法是什么?

由于

1 个答案:

答案 0 :(得分:0)

您可以在BatchLauncher类上使用DependsOn批注来定义类所依赖的bean,如果它们不是作为构造函数参数或自动装配的字段放置的。