使用项目读者和作者Spring Batch编写多个平面文件

时间:2015-03-20 02:59:35

标签: java spring-batch

所以我想创建6个分隔报告,它们都使用相同的数据源和相同的表,每个查询都不同,它们都是独立的。

我现在设置它的方式我有6个pojos,6个行映射器,6个项目阅读器和6个项目编写器并且它有效,是否有一种简化方法而不会使它复杂化,特别是因为6项目阅读器除查询外,它们是相同的。

1 个答案:

答案 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.propertiesspring.batch.job.enabled: false,以便我们控制作业的启动。

因此,我们为每项工作分别设置了上下文,我们使用启动器启动工作,这些启动器会对amqp消息作出反应。每个作业都有隔离的配置类,但我们在@JobScope中定义了可重用的组件,避免重复。

即。我们有文件导入作业,最后一步它需要删除从目录处理的文件。这是@JobScope中的tasklet,这意味着它为每个作业重新创建并进行清理,在每个需要它的作业中都是@Autowired

我们在导入作业中使用的另一个想法是csv中列的动态映射是我们使用Factory @JobScope并且基于某些条件,让我们说它创建的作业参数{ {1}}用于该作业实例。但是除了输入csv文件结构之外我们有相同的工作和相同的一切,所以对我们来说没问题。

如果您有相似但不完全不同的RowFieldSetMapperreaderprocessor我同意复制是可以的,因为它更容易阅读,找出并维护单独的工作。使用常识来判断哪些更好,可读性和可维护性,或者具有复杂的机制,但代码重复较少。