[英]Writing Multiple Flat Files with Item Readers And Writers Spring Batch
所以我想创建6个带分隔符的报表,它们都使用相同的数据源和相同的表,每个查询都不同,它们也都是独立的。
我现在设置的方式有6个pojos,6个行映射器,6个项目读取器和6个项目写入器,并且可以正常工作,有没有一种方法可以简化此过程而不使其变得复杂,特别是因为6个项目读取器是相同的除了查询。
我们有一个Spring Boot应用程序,它具有如下配置文件:
@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);
}
}
带有spring.batch.job.enabled: false
application.properties
,因此我们控制作业的启动。
因此,我们对每个作业都有单独的上下文,我们使用对amqp
消息做出反应的启动器来启动我们的作业。 每个作业都有隔离的配置类,但是我们在@JobScope
定义了可重用的组件,并避免了重复。
即,我们有文件导入作业,并且在最后一步,它需要删除从目录处理的文件。 这是@JobScope
中的tasklet,这意味着将为每个作业重新创建它并进行清理,在需要它的每个作业中将其自动@Autowired
。
我们在导入作业中使用但在csv中具有动态映射列的另一个想法是,我们使用了@JobScope
Factory
,并基于某些条件,可以说作业参数是创建RowFieldSetMapper
以用于该作业实例。 但是除了输入的csv文件结构之外,我们有相同的工作和所有其他事情,因此对我们来说还可以。
如果您有相似但不完全不同的reader
, processor
, writer
我会同意复制是可以的,因为这样会更易于阅读,查明和维护单独的作业。 使用常识来判断哪种方法更好,可读性和可维护性,或者具有复杂的机制但代码重复较少。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.