扩展 RepositoryItemWriter 不会删除行,以便下一步看到行

Extending RepositoryItemWriter does not delete rows so that the next step sees the rows

我正在尝试使用 RepositoryItemWriter 按照建议使用 RepositoryItemWriter 按 ID 删除产品。我已经配置了一个 RepositoryItemWriter 如下:

 @Repository
 public interface ProductRepository extends CrudRepository<Product,Long> {
 }

接下来,我指定一个 RepositoryItemWriter bean,如下所示:

 class ProductRepositoryItemWriter extends RepositoryItemWriter<Product>{
   private CrudRepository productRepository;
    
    ProductRepositoryItemWriter(CrudRepository productRepository) {
   
    super.setRepository(this.productRepository =                                                      
  productRepository
                                                          
    } 

      @Transactional
      @Override
       protected void doWrite(List<? extends Product> products) {                   
      this.productRepository.deleteAll(products);      
  }

} 我的步骤是这样的:

public Step processStep(@Qualifier("jpaTransactionManager") final PlatformTransactionManager jpaTransactionManager) {
    return stepBuilderFactory.get("processStep")
            .transactionManager(jpaTransactionManager)
            .chunk(120)
            .reader(productJpaItemReader)
            .writer((ItemWriter)productRepositoryWriter)
            .build();
   }

我看到发生了删除,但产品没有被删除,因此下一步无法插入产品。该步骤遵循这样的删除步骤 on("COMPLETED").to("uploadStep).end()

@Bean("repopulateFlow")
 Flow repopulateFlow() {
    FlowBuilder<Flow> flowBuilder = new FlowBuilder<>. 
  ("repopulateFlow);
    flowBuilder.start(deleteStep).on("COMPLETED")
            .to(upLoadStep)
            .end();
       return flowBuilder.build();
    }

deleteStep 使用我的 ProductRepositoryItemWriter 删除行,然后流程中的下一步尝试重新插入数据,但是该步骤在 table 中找到 deleteStep 应该从 table。我怎样才能实现我想要做的事情?

我 运行 单独删除作业中的步骤,它不会在完成后删除 table 中的行。我使用 HikariCP 池使用填充 DataSourceProperties 对象的属性来创建数据源。我想知道 Spring 是否没有将其设置为自动提交,或者我需要创建一个 Hikari 池,然后将自动提交 属性 设置为。是的。

uploadStep 失败,因为行仍然存在,所以我得到一个 ConstraintsViolationException。我删除了 @T运行sactional 但问题仍然存在?

您需要删除 doWrite 方法中的 @Transactional。编写器已在 Spring Batch.

驱动的事务中执行