所以我想创建6个分隔报告,它们都使用相同的数据源和相同的表,每个查询都不同,它们都是独立的。
我现在设置它的方式我有6个pojos,6个行映射器,6个项目阅读器和6个项目编写器并且它有效,是否有一种简化方法而不会使它复杂化,特别是因为6项目阅读器除查询外,它们是相同的。
答案 0 :(得分:0)
我们有弹簧启动应用程序,它具有如下配置文件:
@Configuration
@EnableBatchProcessing(modular = true)
public class JobContextConfig {
@Bean
public ApplicationContextFactory job1Factory() {
return new GenericApplicationContextFactory(Job1Config.class);
}
@Bean
public ApplicationContextFactory job2Factory() {
return new GenericApplicationContextFactory(Job2Config.class);
}
@Bean
public ApplicationContextFactory job3Factory() {
return new GenericApplicationContextFactory(Job3Config.class);
}
}
application.properties
与spring.batch.job.enabled: false
,以便我们控制作业的启动。
因此,我们为每项工作分别设置了上下文,我们使用启动器启动工作,这些启动器会对amqp
消息作出反应。每个作业都有隔离的配置类,但我们在@JobScope
中定义了可重用的组件,避免重复。
即。我们有文件导入作业,最后一步它需要删除从目录处理的文件。这是@JobScope
中的tasklet,这意味着它为每个作业重新创建并进行清理,在每个需要它的作业中都是@Autowired
。
我们在导入作业中使用的另一个想法是csv中列的动态映射是我们使用Factory
@JobScope
并且基于某些条件,让我们说它创建的作业参数{ {1}}用于该作业实例。但是除了输入csv文件结构之外我们有相同的工作和相同的一切,所以对我们来说没问题。
如果您有相似但不完全不同的RowFieldSetMapper
,reader
,processor
我同意复制是可以的,因为它更容易阅读,找出并维护单独的工作。使用常识来判断哪些更好,可读性和可维护性,或者具有复杂的机制,但代码重复较少。