一 自动回滚
1,方法上加@Transactional 注解即可,但是这种只能检测运行时异常,非运行时异常那个需要在@Transactional注解里
2,加上rollback = Exception.class
示例:@Transactional(rollbackFor =Exception.class)
这种可应付大多情况。
3,在实际应用中,很多时候需要try catch 这种异常是自己处理了,方法检测不到。事务就不会回滚。应用示例:
需要把数据放入文件中,用了事务,但是IO留基本都会try catch 异常。
处理方法: 在 catch 里加上 throw e 或者throw RunTimeException;
示例: try {
tempFile.createNewFile();
}catch (IOException e) {
e.printStackTrace();
throw e;
}
这样方法里就能检测到异常并捕捉后事务回滚
二 手动回滚
上面两个在catch{...}中抛出异常的方法都有个不足之处,就是不能在catch{...}中存在return子句,所以设置手动回滚,当捕获到异常时,手动回滚,同时返回前台提示信息。
在return前加上下面的话
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
载自 https://www.cnblogs.com/zjfjava/p/9963958.html