Transactions Spring批处理读卡器事务的工作原理

Transactions Spring批处理读卡器事务的工作原理,transactions,spring-batch,Transactions,Spring Batch,我使用spring批处理,在我的情况下,我需要使用悲观锁。 由于文档中说,PagingItemReader将使用单独的事务来缓存项目,因此我选择将项目锁定在处理器中。当时,我使用JdbcPagingItemReader和ItemWriter 但当我转而使用MybatisPagingItemReader和MybatisBatchItemWriter时,我发现reader事务后的第一个区块提交与reader处于同一事务中! 例如,这里有10个要处理的项目,chunksize为2,pagesize为5

我使用spring批处理,在我的情况下,我需要使用悲观锁。
由于文档中说,
PagingItemReader
将使用单独的事务来缓存项目,因此我选择将项目锁定在处理器中。当时,我使用
JdbcPagingItemReader
ItemWriter

但当我转而使用
MybatisPagingItemReader
MybatisBatchItemWriter
时,我发现reader事务后的第一个区块提交与reader处于同一事务中!
例如,这里有10个要处理的项目,chunksize为2,pagesize为5。在第二次提交后的spring批处理中,它将执行第二次读取。在这种情况下,1,2,5,6个项目将在与读取相同的事务中提交,如图片所示。这是如何发生的?[在此处输入图像描述][1]


[1] :image description here]()

我终于发现图片中显示的行为是由mybatis sqlSession引起的。感谢您的帮助

我需要使用悲观锁。
您的具体意思是什么?Spring Batch在与作业存储库交互时使用乐观锁定策略,因此您需要确保您尝试执行的操作与此兼容。
文档称PagingItemReader将使用单独的事务[…]在那时,我使用JdbcPagingItemReader[…]但当我转而使用MybatisPagingItemReader和MybatisBatchItemWriter时,我发现reader事务后的第一个区块提交与reader处于同一事务中:
MybatisPagingItemReader
:这是什么?您确定它正在使用单独的事务吗?Spring Batch未提供此读卡器,因此问题不在Spring Batch中。您是否对JdbcPagingItemReader有相同的问题?如果是,请提供再现问题的最小示例。