Spring Batch BATCH_JOB_SEQ 出现死锁问题

1、数据库分析死锁sql问题

  插入BATCH_JOB_SEQ默认值或从BATCH_JOB_SEQ中删除,其中ID< some_number

  使用默认的MapJobRegistry,以及默认的作业存储库或指定JobRepositoryFactoryBean.对于用于与Spring Batch数据库交互的数据源,我们使用标准Microsoft SQL Server SQLServerDriver尝试了DriverManagerDataSource或DBCP2池BasicDataSource.我可以上传更具体的配置文件,但在我的测试中,只要我使用SQL Server和标准的Spring配置就会出现问题. 在我的调查中,我认为问题是由于默认的增量器类org.springframework.jdbc.support.incrementer.SqlServerMaxValueIncrementer如何将作业和步骤实例ID与SQL Server数据库表的构造方式相结合. SqlServerMaxValueIncrementer中的代码是同步的,因此如果我们在同一Java实例中运行所有作业,这将不是问题.

  如果我们在DB2数据库中实现Spring Batch元数据,我们就没有问题. SQL Server实现使用实际表,DB2实现使用序列对象.

  问题解决:

配置JobRepository的databaseType和isolationLevelForCreate属性.以下是我在SQL Server 2008中使用的设置: 

<bean id="jobRepository"
    class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="transactionManager" ref="transactionManager" />
    <property name="databaseType" value="SQLSERVER" />
    <property name="isolationLevelForCreate" value="ISOLATION_REPEATABLE_READ" />
</bean>

posted on   书梦一生  阅读(1863)  评论(0编辑  收藏  举报

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示