更改弹簧批次控制表锁定策略



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

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

有没有办法告诉Spring Batch在进行SELECT语句时使用只读并发?如果没有,除了编写我们自己的JobExplorer来完成这项工作之外,是否有某种机制?

通过使用

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

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

有没有办法告诉 Spring Batch 在制作 SELECT 语句时使用只读并发?如果没有,除了编写我们自己的 JobExplorer 之外,是否有其他机制来实现这一点?

存在使作业资源管理器事务性(只读(的未解决问题:https://github.com/spring-projects/spring-batch/issues/1307。同时,您可以使SimpleJobExplorer事务性(通过 AOP 或扩展它以在方法上添加@Transactional(readOnly = true)(。

最新更新