1.同一个类中 事务publicA掉非事务B B抛异常 AB事务生效(具有传播性)
@Override @Transactional public void A() { User u = new User(); u.setAccount("test"); u.setName("1"); u.setMobile("12345678912"); u.setPassword("111"); this.save(u); B(); } public void B() { User u1 = new User(); u1.setAccount("test1"); u1.setName("2"); u1.setMobile("12345678913"); u1.setPassword("111"); this.save(u1); //促发异常 if(3/0==1) System.out.println(""); }1234567891011121314151617181920212223
2.同一个类中 事务A掉非事务B A抛异常 AB事务生效
@Override @Transactional public void A() { User u = new User(); u.setAccount("test"); u.setName("1"); u.setMobile("12345678912"); u.setPassword("111"); this.save(u); B(); //促发异常 if(3/0==1) System.out.println(""); } public void B() { User u1 = new User(); u1.setAccount("test1"); u1.setName("2"); u1.setMobile("12345678913"); u1.setPassword("111"); this.save(u1); }1234567891011121314151617181920212223
3.同一个类中 事务A掉事务B A抛异常 AB事务生效
@Override @Transactional public void A() { User u = new User(); u.setAccount("test"); u.setName("1"); u.setMobile("12345678912"); u.setPassword("111"); this.save(u); B(); //促发异常 if(3/0==1) System.out.println(""); } @Transactional public void B() { User u1 = new User(); u1.setAccount("test1"); u1.setName("2"); u1.setMobile("12345678913"); u1.setPassword("111"); this.save(u1); }123456789101112131415161718192021222324
4.同一个类中 事务A掉事务B B抛异常 AB事务生效
@Override @Transactional public void A() { User u = new User(); u.setAccount("test"); u.setName("1"); u.setMobile("12345678912"); u.setPassword("111"); this.save(u); B(); } @Transactional public void B() { User u1 = new User(); u1.setAccount("test1"); u1.setName("2"); u1.setMobile("12345678913"); u1.setPassword("111"); this.save(u1); //促发异常 if(3/0==1) System.out.println(""); }123456789101112131415161718192021222324
5.同一个类中 非事务A掉事务B B抛异常 A无事务 B事务不生效
@Override public void A() { User u = new User(); u.setAccount("test"); u.setName("1"); u.setMobile("12345678912"); u.setPassword("111"); this.save(u); B(); } @Transactional public void B() { User u1 = new User(); u1.setAccount("test1"); u1.setName("2"); u1.setMobile("12345678913"); u1.setPassword("111"); this.save(u1); //促发异常 if(3/0==1) System.out.println(""); }1234567891011121314151617181920212223
6.同一个类中 非事务A掉事务B(通过注入-相当于调用不同类中的B方法) B抛异常 A无事务,B事务生效
@Override public void A() { User u = new User(); u.setAccount("test"); u.setName("1"); u.setMobile("12345678912"); u.setPassword("111"); this.save(u); userService.B(); } @Transactional @Override public void B() { User u1 = new User(); u1.setAccount("test1"); u1.setName("2"); u1.setMobile("12345678913"); u1.setPassword("111"); this.save(u1); //促发异常 if(3/0==1) System.out.println(""); }123456789101112131415161718192021222324
7.同一个类中 非事务A掉事务B(通过注入) A抛异常 A无事务,B不促发事务,ab数据都会增加成功
@Override public void A() { User u = new User(); u.setAccount("test"); u.setName("1"); u.setMobile("12345678912"); u.setPassword("111"); this.save(u); userService.B(); //促发异常 if(3/0==1) System.out.println(""); } @Transactional @Override public void B() { User u1 = new User(); u1.setAccount("test1"); u1.setName("2"); u1.setMobile("12345678913"); u1.setPassword("111"); this.save(u1); }123456789101112131415161718192021222324
8.同一个类中 事务A掉非事务B(通过注入)A或B抛异常 AB事务生效 (事务传播性)
@Transactional @Override public void A() { User u = new User(); u.setAccount("test"); u.setName("1"); u.setMobile("12345678912"); u.setPassword("111"); this.save(u); userService.B(); //促发异常 if(3/0==1) System.out.println(""); } @Override public void B() { User u1 = new User(); u1.setAccount("test1"); u1.setName("2"); u1.setMobile("12345678913"); u1.setPassword("111"); this.save(u1); }123456789101112131415161718192021222324
总结:1.事务A掉B ,AB都有事务(事务传播性)2.非事务A掉事务B,A都无事务,B只有通过注入(AOP)方式调用的时候,B的事务才生效。3.private不能加事务 4.声明式事务如果要细化,可以拆分方法
非事务A掉事务B(AOP)方式可以用xxxService xxxService = (xxxService)(AopContext.currentProxy());然后xxxService.B(),获取到xxxService的代理类,再调用事务方法,强行经过代理类,激活B事务切面。
————————————————
版权声明:本文为CSDN博主「浮生若梦l」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_32784303/article/details/126121721