【问题标题】:Writing Multiple Flat Files with Item Readers And Writers Spring Batch使用项目读取器和写入器 Spring Batch 编写多个平面文件
【发布时间】:2015-03-20 02:59:35
【问题描述】:

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

我现在设置它的方式我有 6 个 pojos、6 个行映射器、6 个项目阅读器和 6 个项目编写器并且它工作正常,有没有办法简化它而不使它变得过于复杂,特别是因为 6 个项目阅读器除了查询之外都是一样的。

【问题讨论】:

  • 没有。这是正确的做法——SB 是基于授权和组合。不要看你现在写了多少东西,而是想想如果你想添加、删除或修改报告,维护起来会很容易:一个组件一个责任,而不影响其他对象,

标签: java spring-batch


【解决方案1】:

我们有 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);
    }       
}

还有application.propertiesspring.batch.job.enabled: false,所以我们控制作业的启动。

所以我们为每个作业都有单独的上下文,我们从启动器开始我们的作业,这些启动器对amqp 消息作出反应。每个作业都有隔离的配置类,但我们在@JobScope 中定义了可重用的组件并避免重复。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    相关资源
    最近更新 更多