spring boot 事务方法中调用事务方法
菜园小火车 2019-01-18 11:58:23 目的:
A,B同时被注解 @Transactional(rollbackFor = Exception.class)
A()中调用B(),B方法中抛出异常的时候只回滚B()中的事务,不影响A()事务的执行。
@Transactional(rollbackFor = Exception.class)
public void A() throws Exception {
User user = new User();
user.setUserName("test1");
user.setUserPassword("password1");
user.setUserSex(1);
userMapper.insertOne(user);
User user1 = new User();
user1.setUserName("test2");
user1.setUserPassword("password2");
user1.setUserSex(0);
userMapper.insertOne(user1);
B();
}
@Transactional(rollbackFor = Exception.class)
public void B() throws Exception {
System.out.println("addUser3");
User user1 = new User();
user1.setUserName("test3");
user1.setUserPassword("password3");
user1.setUserSex(0);
userMapper.insertOne(user1);
throw new Exception("3333333333333333333");
}
尝试方法:
1, 修改B注解为 @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
2, 修改A中调用为((UserService) AopContext.currentProxy()).B();
均失败。
在一个没有 @Transactional,通过currentProxy()去调用一个注解了@Transactional,则可以实现B的事务。