在单个事务中运行Spring批处理步骤
我正在编写Spring批处理作业,以:在单个事务中运行Spring批处理步骤,spring,spring-boot,transactions,spring-batch,Spring,Spring Boot,Transactions,Spring Batch,我正在编写Spring批处理作业,以: 从数据库表中读取一些记录 将它们写入文件 更新同一数据库表上的相同记录 到目前为止,我的解决方案包括: 从数据库中读取数据的 A,这反过来又代表 写入文件的方法 A以更新数据库中已处理的记录 如何确保整个步骤在单个事务中运行?只有在步骤成功的情况下,我才能提交数据库更新 以下是相关的基于Java的配置代码: @Bean public Step step1() { return stepBuilderFactory.get("st
- 从数据库中读取数据的
- A,这反过来又代表
- 写入文件的方法
- A以更新数据库中已处理的记录
更新
以下是相关的基于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();
}
@Bean
公共步骤第1步(){
返回stepBuilderFactory.get(“step1”)
.chunk(…)
.读者(……)
.处理器(…)
.writer(compositeWriter())
.build();
}
@豆子
公共CompositeItemWriter compositeWriter(){
返回新的CompositeItemWriterBuilder()
.delegates(…,jdbcWriter())
.build();
}
@豆子
公共JdbcBatchItemWriter jdbcWriter(数据源数据源){
返回新的JdbcBatchItemWriterBuilder()
.itemSqlParameterSourceProvider(…)
.sql(“更新…”)
.dataSource(数据源)
.build();
}
首先,在单个事务中运行整个步骤并不是面向块的处理模型的目的。原因显然与处理大量数据时长时间运行的事务有关
也就是说,没有什么可以阻止您创建一个自定义步骤实现,如果它对您有效,它将在单个事务中工作,即使我不建议这样做。也许这会有所帮助:那么为什么要首先使用Spring批处理呢?因为尝试在1中运行这个事务基本上是违背了最初使用Spring批处理的目的。