我正在开发一个 Spring Batch Tasklet 作业,执行以下步骤:
我面临的问题是数据持久化仅在整个 Tasklet 执行完成后才会发生。我需要每条记录在处理和验证后立即保留,但我无法实现这一点。
这是我迄今为止尝试过的:
有没有办法解决这个问题,让每条记录在Tasklet执行期间立即保存到数据库中?
任何有关配置或方法的建议将不胜感激!
手动处理
PlatformTransactionManager
应该可以完成这项工作。
@Component
public class CustomTasklet implements Tasklet {
@Autowired
private PlatformTransactionManager transactionManager;
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) {
TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition());
try {
// Do some writes here
transactionManager.commit(status);
} catch (Exception e) {
transactionManager.rollback(status);
}
return RepeatStatus.FINISHED;
}
}