繁体   English   中英

在单个事务中运行 Spring 批处理步骤

[英]Running a Spring Batch step in a single transaction

我正在编写 Spring 批处理作业以:

  1. 从数据库表中读取一些记录
  2. 将它们写入文件
  3. 更新同一个数据库表上的相同记录

到目前为止,我的解决方案包括:

如何确保整个步骤在单个事务中运行? 只有当该步骤成功时,我才能提交数据库UPDATE

以下是相关的基于 Java 的配置代码:

@Bean
public Step step1() {
    return stepBuilderFactory.get("step1")
            .<Person, Person>chunk(...)
            .reader(...)
            .processor(...)
            .writer(compositeWriter())
            .build();
}

@Bean
public CompositeItemWriter<Person> compositeWriter() {
    return new CompositeItemWriterBuilder<Person>()
            .delegates(..., jdbcWriter())
            .build();
}

@Bean
public JdbcBatchItemWriter<Person> jdbcWriter(DataSource dataSource) {
    return new JdbcBatchItemWriterBuilder<Person>()
        .itemSqlParameterSourceProvider(...)
        .sql("UPDATE ...")
        .dataSource(dataSource)
        .build();
}

在单个事务中运行整个步骤首先不是面向块的处理 model 的目的。 原因显然与处理大量数据时相关的长时间运行的事务有关。

也就是说,没有什么能阻止您创建一个自定义步骤实现,如果这对您有用,那么它可以在单个事务中完成工作,即使我不建议这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM