前言
事务注解在进行时,抛出了异常

示例
在UserService
类上
less
@Slf4j
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
@Transactional(rollbackFor = Exception.class)
public void say() {
log.info("============执行say()==============");
User user = new User();
user.setUserName("aaa");
userRepository.save(user);
int a = 1 / 0;
}
}
less
@Slf4j
@Service
public class PersonService {
@Autowired
private UserService userService;
@Transactional(rollbackFor = Exception.class)
public void say() {
log.info("PersonService say");
try {
userService.say();
} catch (Exception e) {
e.printStackTrace();
}
}
}
准备一个接口
less
@Slf4j
@RestController
public class IndexController {
@Autowired
private PersonService personService;
@GetMapping("/hello")
public Integer hello() {
personService.say();
return 1;
}
}
访问
bash
http://ip:端口/hello
发现会抛事务异常,
原因是A方法又catch到B方法抛出的异常,但是A方法catch到异常后没有继续往上抛出,而是继续执行后面的代码,最后正常提交事务,那么就会抛出 Transaction rolled back because it has been marked as rollback-only这异常!(因为AB是用同一个事务,在B方法执行的时候这个事务就标记为rollback-only,然后A方法继续使用该事务,然后又执行事务提交的操作,所以最后会抛异常)
