spring boot的事务只有当注解@Transactional 所在类或者方法,能够直接捕获RuntimeException才可以进行回滚。
举例:
public void add() {
try {
City city = new City();
city.setName("qwe");
cityDao.insert(city);
City city1 = new City();
city1.setName("qwe1");
cityDao.insert(city1);
throw new RuntimeException("qwe");
} catch (Exception e) {
e.printStackTrace();
}
}
不好意思这个代码不能回滚,因为这个方法不会抛出异常aop根本捕捉不到。所以不会滚。
public void add() {
City city = new City();
city.setName("qwe");
cityDao.insert(city);
City city1 = new City();
city1.setName("qwe1");
cityDao.insert(city1);
throw new RuntimeException("qwe");
}
上述的代码可以回滚,因为你已经抛出了。
如果你想在第一种也进行回滚,可以手动进行。
public void add() {
try {
City city = new City();
city.setName("qwe");
cityDao.insert(city);
City city1 = new City();
city1.setName("qwe1");
cityDao.insert(city1);
throw new RuntimeException("qwe");
} catch (Exception e) {
e.printStackTrace();
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
}
这样就添加了手动强制回滚。