扩展 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.
驱动的事务中执行
我正在尝试使用 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.