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