假设我们在DB中有1000个项目,我们一次尝试获取和删除10个项目。为此我们已经实现了Spring批处理。
根据以下配置。
<batch:chunk reader="tokenReader" writer="tokenWriter" commit-interval="10"></batch:chunk>
我们有ItemReader
类,它一次从数据库中获取10个项目,并将10个令牌的列表传递给ItemWriter
。
因此,在处理了10个项目之后,它应该理想地提交。
但我们面临以下问题。
使用commit-interval = 10
,JobLauncher启动10个线程,每个线程从数据库中获取相同的10个令牌,一旦ItemReader将10个令牌的列表传递给ItemWriter,我们就会收到异常(“The token is already marked to be deleted
”{ {1}})。
但是,如果我们设置JPA Exception
,它只启动commit-interval = 1
个线程并成功执行,一次获取并删除10个项目。