spring事务详解,血详细。。。

转载:http://www.linkedkeeper.com/1045.html

回头来看这个,之前还漏了个东西,spring 的事务回滚默认是只回滚RuntimeException或者Error

public boolean rollbackOn(Throwable ex) {
return (ex instanceof RuntimeException || ex instanceof Error);
}

所以如果在trycatch里除了错不会回滚,想回滚的话要rollback = Exception.class
几个点:
怎么判断是否已经在事务中:
spring事务详解,血详细。。。
判断当前线程是否存在事务就是判断记录的数据库连接是否为空并且transactionActive状态为true。还记得以前写过,事务下的逻辑取得connection后是保存在threadlocal中的。
spring事务详解,血详细。。。
如果是REQUEST_NEW这种的,就挂起当前事务并新建一个事务,里面就是将当前connectionHolder置空并重新获取一个connection。再里面的回滚和提交就是底层数据库API的回滚和提交了。

嵌套事务保存点在mysql中的概念:https://www.cnblogs.com/coolhtm/p/3942287.html
其实就是ROLLBACK和ROLLBACK_TO_SAVEPOINT