更改Spring Batch控制表锁定策略

问题描述 投票:0回答:1

[我们有一个系统,允许操作员通过使用JobExplorer获取对JobExecution的引用并在其上调用stop()来停止长时间运行的Spring Batch作业。然后,我们的作业中就有代码,这些代码使用JobExplorer获取JobExecution的最新副本,以检查其是否已标记为STOPPING。

我们的问题是Microsoft SQL Server 2016中元数据表上的死锁。每个选择都在执行共享页锁定。我已经找到的有关更改锁定级别的所有内容都涉及使用SELECT语句上的提示。但是Spring Batch是在创建语句,而不是我们的代码。

[SELECT语句中是否有一种方法可以告诉Spring Batch使用只读并发?如果不是,是否有某种机制可以编写我们自己的JobExplorer来完成此任务?

sql-server spring-batch database-deadlocks
1个回答
1
投票

通过使用JobExplorer获得对JobExecution的引用并在其上调用stop()来停止长时间运行的Spring Batch作业。

JobExecution#stop将在下一个次要版本4.3中弃用,并在下一个主要版本中删除(请参阅https://github.com/spring-projects/spring-batch/issues/1605)。停止作业执行的正确方法是使用JobOperator#stop

是否有方法在创建SELECT语句时告诉Spring Batch使用只读并发?如果不是,是否有某种机制可以编写我们自己的JobExplorer来完成此任务?

存在一个开放的问题,使作业浏览器具有事务性(只读):https://github.com/spring-projects/spring-batch/issues/1307。同时,您可以使SimpleJobExplorer具有事务性(通过AOP或通过对其进行扩展以在方法上添加@Transactional(readOnly = true))。

© www.soinside.com 2019 - 2024. All rights reserved.