Spring学习总结(33)—— 用 Spring 的 @Transactional 注解控制事务有哪些不生效的场景?

Posted 科技D人生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring学习总结(33)—— 用 Spring 的 @Transactional 注解控制事务有哪些不生效的场景?相关的知识,希望对你有一定的参考价值。

数据库引擎不支持事务

这里以 mysql 为例,其 MyISAM 引擎是不支持事务操作的,InnoDB 才是支持事务的引擎,一般要支持事务都会使用 InnoDB。根据 MySQL 的官方文档:

https://dev.mysql.com/doc/refman/5.5/en/storage-engine-setting.html

从 MySQL 5.5.5 开始的默认存储引擎是:InnoDB,之前默认的都是:MyISAM,所以这点要值得注意,底层引擎不支持事务再怎么搞都是白搭。

没有被 Spring 管理

如下面例子所示:

// @Service
public class OrderServiceImpl implements OrderService {
 
    @Transactional
    public void updateOrder(Order order) {
        // update order
    }
 
}

如果此时把 @Service 注解注释掉,这个类就不会被加载成一个 Bean,那这个类就不会被 Spring 管理了,事务自然就失效了。

方法不是 public 的

以下来自 Spring 官方文档:

When using proxies, you should apply the @Transactional annotation only to methods with public visibility. If you do annotate prot

以上是关于Spring学习总结(33)—— 用 Spring 的 @Transactional 注解控制事务有哪些不生效的场景?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 学习总结(33)—— Spring Boot 3 的声明式 HTTP 调用

Spring MVC +Spring 框架学习总结-全网最好用的学习笔记

Spring学习总结

spring 学习总结

spring学习总结015 --- spring事务

Tiny-Spring项目学习总结