我有一个@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()类之前调用init()方法,该方法获取Launcher bean并启动批处理作业。如果代码launcher.launch()被注释掉,应用程序在调试中运行,调试器将在构造各种@Bean的代码中停止。但是,当launcher.launch()存在并运行时,该代码将首先运行,这意味着ItemWriter所依赖的been没有被正确初始化。
这是用于启动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>解决这个问题的最好方法是什么?
谢谢
发布于 2015-02-01 13:47:15
您可以使用BatchLauncher类上的BatchLauncher注释来定义类所依赖的bean(如果它们不是作为构造函数参数或自动设置的字段)。
https://stackoverflow.com/questions/28260679
复制相似问题