我们的要求是在Slave步骤DB writer Commit之后将Items发送到队列。
这是一个本地分区应用程序,它读取文件并拆分为 30 个 Slave 步骤并插入到一个表中。在表插入提交之后,我们希望将一些属性从从属编写器发送到嵌入式队列,该队列将再次插入到另一个表中(这是另一个事务的一部分)。我们希望确保队列事务提交应该在spring批从属写入器提交
之后发生我们已经尝试过
我们尝试过 ItemWriteListener@AfterWrite。这在提交事务之前没有帮助。计划使用 ChunkListener@afterChunk 但这没有项目块,我们需要从从属步骤线程中设置它,并且不确定对并发性有任何影响。请让我们知道任何其他最佳替代方案
从站步骤供参考
@Bean
public Step slaveStep(ItemReader<BaseDTO> dispatchReader, CompositeItemProcessor<BaseDTO, BaseDTO> dispatchProcessor, CompositeItemWriter<BaseDTO> dispatchWriter) throws Exception {
return new StepBuilder("slaveStep", jobRepository).<BaseDTO, BaseDTO>chunk(chunkSize, dispatchTransactionManager).reader(dispatchReader)
.processor(dispatchProcessor).writer(dispatchWriter)
.faultTolerant().skipLimit(skipErrorCount)
.skip(Exception.class)
.noRetry(Exception.class)
.noRollback(Exception.class)
.processorNonTransactional()
.listener(itemSkipListener())
.listener(stepExecutionListener())
.build();
}
我会保持简单(与使用侦听器或复合编写器以及处理 XA 事务等相比),并添加一个后续步骤,从表中读取已提交的项目并将它们发送到队列。此步骤将在分区步骤完成将数据写入表后开始。