spring事务,代码验证

Spring框架几乎是Java的必备工具,掌握事务机制非常重要,以应对不同场景的业务需要。

Spring 事务(Spring Transaction)是 Spring 框架中对事务管理的封装,用于保证数据的一致性、完整性,尤其在操作数据库时尤为重要。它支持 声明式事务管理编程式事务管理 两种方式,其中最常用的是基于注解的声明式事务。

 

事务注解详解

@Transactional(
propagation = Propagation.REQUIRED,
isolation = Isolation.READ_COMMITTED,
timeout = 30,
rollbackFor = Exception.class
)

属性说明
propagation 事务的传播行为(默认 REQUIRED
isolation 事务的隔离级别(默认 DEFAULT
timeout 超时时间,单位为秒
readOnly 是否只读,优化性能
rollbackFor 指定哪些异常触发回滚

传播行为(Propagation)

类型含义
REQUIRED 如果有事务就加入,没有就新建(默认)
REQUIRES_NEW 总是新建一个事务,原事务挂起
NESTED 如果当前存在事务,则嵌套事务
SUPPORTS 有事务就用,没有就非事务执行
NOT_SUPPORTED 始终非事务执行
NEVER 如果存在事务就抛出异常
MANDATORY 必须存在事务,否则抛异常

 写代码来验证。

 0、搭建环境

    springboot + MySQL + mybatisplus
 1、目录结构

 启动后,访问地址:http://localhost:8080/api/user/insert

2、主要代码

//UserDoServiceA调用UserDoServiceB,根据测试场景调整@Transactional的传播行为
//    @Transactional
public String insertA() {
        UserDo userDo = new UserDo();
        userDo.setName("A");
        log.info("UserDoServiceA");
        userDo.insert();

        log.info("UserDoServiceB");

        userDoServiceB.insertB();
        return "yes";
    }

//@Transactional(propagation = Propagation.MANDATORY)
    public String insertB() {
        UserDo userDoB = new UserDo();
        userDoB.setName("B");
        userDoB.insert();
        int a = 2 / 0;
        return "yes";
    }

3、各个传播机制的验证,在文件readme.md

代码地址:https://github.com/hannibal2017/java-project/tree/main/spring-transaction

 

事务原理

 Spring AOP增强实现的

 

事务失效

 1、方法不是public,而是private、protected;2、类内部调用,比如this.方法;3、异常处理;等等。参考:https://cloud.tencent.com/developer/article/1876768

posted @ 2025-04-26 23:05  阿罗luo  阅读(9)  评论(0)    收藏  举报