警告:JPA 不支持自定义隔离级别,因此启动 Jobs 时可能不会获取锁

Posted

技术标签:

【中文标题】警告:JPA 不支持自定义隔离级别,因此启动 Jobs 时可能不会获取锁【英文标题】:Warning: JPA does not support custom isolation levels, so locks may not be taken when launching Jobs 【发布时间】:2020-06-16 23:09:16 【问题描述】:

在我的应用程序(Spring Boot、Spring Data JPA、Spring Batch、Postgres DB)启动期间,我收到这样的警告:

2020-03-04 11:53:24.559  WARN [-,,,] 25743 --- [           main] o.s.b.a.batch.JpaBatchConfigurer         : JPA does not support custom isolation levels, so locks may not be taken when launching Jobs

我对 Spring Boot 隔离级别做了一些研究,我们有:DEFAULTREAD_COMMITTEDREAD_UNCOMMITTEDREPEATABLE_READSERIALIZABLE

从警告中我了解到 JPA 不支持该功能,但仅对给定数据库使用 DEFAULT,就我而言,Postgres 是 READ_COMMITTED

我还读到 Spring 批处理事务的默认隔离级别是 SERIALIZABLE,以防止同时执行同一个作业实例。

谁能解释一下,我什么时候会担心这个警告?我不知道我是否应该为此做点什么。

【问题讨论】:

【参考方案1】:

READ_COMMITTED 应该可以与 Postgers 一起正常工作。来自 Spring Batch 文档的 Transaction Configuration for the JobRepository 部分:

该方法的默认隔离级别是 SERIALIZABLE,这是相当激进的:READ_COMMITTED 也可以工作

所以我相信这个警告可以忽略。

【讨论】:

以上是关于警告:JPA 不支持自定义隔离级别,因此启动 Jobs 时可能不会获取锁的主要内容,如果未能解决你的问题,请参考以下文章

MySQL事务隔离级别详解

事务隔离级别

Hibernate、spring、JPS 和隔离 - 不支持自定义隔离

启动时的 JPA 自定义脚本

数据库隔离级别

事务隔离级别