我是Spring Batch
的新手,想了解如何避免出现以下问题。在我的项目中,我们使用AppCommonConfig
列出了所有要调用的批处理文件,并使用了Spring Boot。当我运行AAA
批处理作业时,它也会加载其他批处理作业的所有bean,我认为这不是正确的方法。
我们如何避免或调整以下代码?
我只想加载那些属于我当前正在运行的批处理作业的bean。
AppCommonConfig.java
@Configuration
@ComponentScan("com.test1.test2")
@EnableBatchProcessing
@EnableScheduling
@PropertySource("classpath:appconfig.properties")
@ImportResource({ "classpath:META-INF/Q.xml", "classpath:META-INF/R.xml",
"classpath:META-INF/ABC.xml",
"classpath:META-INF/XYZ.xml",
"classpath*:META-INF/AAA.xml", "classpath*:META-INF/YYY.xml",
"classpath*:META-INF/KKK.xml", "classpath:META-INF/BBB.xml",
"classpath:META-INF/CCC.xml",
"classpath:META-INF/DDD.xml",
"classpath:META-INF/EEE.xml" ,
............
...............
...............
...................
"classpath:META-INF/ZZZ.xml"})
public class AppCommonConfig {
@Bean
BatchConfigurer configurer(@Qualifier("batchDataSource") DataSource dataSource) {
return new DefaultBatchConfigurer(dataSource);
}
}
答案 0 :(得分:0)
您可以使用Spring配置文件:https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#beans-definition-profiles。
在您的情况下,每个作业可以有一个配置文件。当您使用特定配置文件运行应用程序时,将仅加载该配置文件的bean。
作为旁注,对我来说,拥有一个AppCommonConfig
类来导入所有批处理作业定义似乎并不自然。我只将普通bean放在该类中(数据源,事务管理器等),并为每个作业创建一个单独的类(在这种情况下,由于bean是按设计分开的,因此您可能不需要使用概要文件。)>