spring和springboot事务测试

spring事务测试

1.启动类添加@EnableAspectJAutoProxy(exposeProxy = true) 添加AOP事务
2.代码

@RestController
@RequestMapping("/user")
public class UserController {

    @Resource
    private UserMapper mapper;

    //只有d被@Transactional修饰,当c直接调用d,抛出异常,数据不回滚,当使用(calssname)AopContext.currentProxy调用d抛出异常,数据回滚
    @RequestMapping("/c")
    public void c() {
        this.d(); //抛出异常但是数据库数据不回滚
        //((UserController) AopContext.currentProxy()).d(); // 抛出异常,数据回滚

    }

    @Transactional
    @RequestMapping("/d")
    public void d() {
        user u = new user();
        u.setNumber(1);
        u.setName("LCF05");
        u.setSex(0);
        u.setAge(18);
        mapper.insertUser(u); // 插入数据 用自己的即可
        int a = 4 / 0; // 手动异常
    }



    //a和b都用@Transactional修饰了,抛出异常,a和b都全部回滚
    @Transactional
    @RequestMapping("/a")
    public void a() {
        user u = new user();
        u.setNumber(1);
        u.setName("lcf01");
        u.setSex(0);
        u.setAge(18);
        mapper.insertUser(u); // 插入数据 用自己的即可
        this.b();
        int a = 4 / 0;
    }

    @Transactional
    @RequestMapping("/b")
    public void b() {
        user u = new user();
        u.setNumber(1);
        u.setName("lcf01");
        u.setSex(0);
        u.setAge(18);
        mapper.insertUser(u); // 插入数据 用自己的即可
    }


    /*e用@Transactional修饰,f用@Transactional(propagation = Propagation.REQUIRES_NEW)修饰,
    e使用(classname)AopContext.currentProxy()调用f,
    实现了e回滚,f正常插入数据*/
    @Transactional
    @RequestMapping("/e")
    public void e() {
        user u = new user();
        u.setNumber(1);
        u.setName("test01");
        u.setSex(0);
        u.setAge(18);
        mapper.insertUser(u); // 插入数据 用自己的即可
        ((UserController)AopContext.currentProxy()).f();
        int a = 4 / 0;
    }

    @Transactional(propagation = Propagation.REQUIRES_NEW)
    @RequestMapping("/f")
    public void f() {
        user u = new user();
        u.setNumber(1);
        u.setName("test02");
        u.setSex(0);
        u.setAge(18);
        mapper.insertUser(u); // 插入数据 用自己的即可
    }
}

springboot事务

1.启动类无需注入@EnableAspectJAutoProxy(exposeProxy = true) ,因为springboot会自主配置好AOP事务
2.代码块

@RestController
@RequestMapping("/userDemo")
public class UserDemoController {

    @Resource
    private UserMapper mapper;


    //只有d被@Transactional修饰,d抛出异常,c正常,d数据回滚
    @RequestMapping("/c")
    public void c() {
        user u = new user();
        u.setNumber(1);
        u.setName("test01");
        u.setSex(0);
        u.setAge(18);
        this.d(); //抛出异常数据库数据回滚

    }

    @Transactional
    @RequestMapping("/d")
    public void d() {
        user u = new user();
        u.setNumber(1);
        u.setName("test02");
        u.setSex(0);
        u.setAge(18);
        mapper.insertUser(u); // 插入数据 用自己的即可
        int a = 4 / 0; // 手动异常
    }



    //a和b都用@Transactional修饰了,a抛出异常,a和b都全部回滚
    @Transactional
    @RequestMapping("/a")
    public void a() {
        user u = new user();
        u.setNumber(1);
        u.setName("TEST01");
        u.setSex(0);
        u.setAge(18);
        mapper.insertUser(u); // 插入数据 用自己的即可
        this.b();
        int a = 4 / 0;
    }

    @Transactional
    @RequestMapping("/b")
    public void b() {
        user u = new user();
        u.setNumber(1);
        u.setName("TEST02");
        u.setSex(0);
        u.setAge(18);
        mapper.insertUser(u); // 插入数据 用自己的即可
    }



    //e和f都用@Transactional修饰了,f抛出异常,e和f都全部回滚
    @Transactional
    @RequestMapping("/e")
    public void e() {
        user u = new user();
        u.setNumber(1);
        u.setName("test01");
        u.setSex(0);
        u.setAge(18);
        this.f(); //抛出异常数据库数据回滚

    }

    @Transactional
    @RequestMapping("/f")
    public void f() {
        user u = new user();
        u.setNumber(1);
        u.setName("test02");
        u.setSex(0);
        u.setAge(18);
        mapper.insertUser(u); // 插入数据 用自己的即可
        int a = 4 / 0; // 手动异常
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值