如何在 Spring Boot 中使用 @Transactional 注解
Posted
技术标签:
【中文标题】如何在 Spring Boot 中使用 @Transactional 注解【英文标题】:How to use @Transactional annotation in Spring boot 【发布时间】:2019-09-20 14:57:56 【问题描述】:我正在做一个 spring-boot 项目。
在我的项目中使用@Transactional
注解之前,我有两个问题
在spring-boot、服务层或DAO层使用@Transactional
注解的最佳实践?
如果是服务层,那么我应该在哪里使用 @Transactional
注释在一个类或该类中的方法上?
【问题讨论】:
***.com/questions/1079114/… & ***.com/questions/26491688/… 的可能重复 @DEBENDRADHINDA 2 个问题没有得到回答,实际上这两种情况都有 2 个赞成的答案 【参考方案1】:-
在服务层:你希望你的整个业务方法都是 ACID
如果您希望所有 bean 方法都是事务性的,则在类上;如果您希望特定方法是事务性的,或者具有不同的事务性属性,则在方法上
【讨论】:
【参考方案2】:-
在Service layer 中使用@Transactional,因为DAO 层不应包含业务逻辑
Service 层可能调用不同的 DAO 来执行 DB 操作。让我们假设一个服务方法中有 3 个 DAO 操作的情况。如果您的第一个 DAO 操作失败,其他两个可能仍会通过,您最终会出现不一致的数据库状态。注释服务层可以帮助您避免这种情况。
-
在方法级别使用它,因为类级别的用处不大,因为它强制所有方法(以及未来的方法/子类)都是事务性的
在类级别,此注释默认应用于声明类及其子类的所有方法
【讨论】:
@Transactional 注释适用于类级别,但它给出错误“org.hibernate.AssertionFailure: 可能对会话进行非线程安全访问”我的数据库表上应用了触发器。 @ShahanawajMulla 请用相关代码提出一个新问题以上是关于如何在 Spring Boot 中使用 @Transactional 注解的主要内容,如果未能解决你的问题,请参考以下文章
在spring boot中进行单元测试之前,通过data.sql文件向h2数据库中插入数据
Spring Cloud 任务的 SimpleTaskConfiguration 和 Spring Batch 的 SimpleBatchConfiguration 防止 Spring Boot 自动
如何在 spring-boot 中禁用 spring-data-mongodb 自动配置
如何在 Spring Boot 中使用 @Transactional 注解