Spring JTA 事务属性rollBackOnCommitFailure

Spring JTA 事务属性rollBackOnCommitFailure

最近一批数据错误,最后一路查找问题定位到这个事务属性上.当时日志抛出了:

jotm Cannot call rollback when autocommit=true

属性的意思是在进行事务的commit操作时,遇到异常,是否会滚之前的事务,在spring的事务管理器下,这个属性默认为false。
在commit遇到异常的情况应该很少,更多应该是在批量数据处理时遇到的网络阻塞,因为我就是在一个接口程序上发现这个问题的,然后是跨数据库平台,可能会加大这部分的网络开销。

一般测试都是应用上的测试,比如手动或者满足一定条件throw异常,这类异常在被抛出时,通过事务框架会设置事务的rollbackonly,就不会等到提交那一步。

下面是一段资料对这个属性的描述:

如果 AbstractPlatformTransactionManager 的 rollbackOnCommitFailure 状态被设置为true,则表示如果在事务提交过程中出现异常,需要回滚事务。所以,当commit(Transac-tionStatus)方法捕获相应异常,并且检测到该字段被设置的时候,需要回滚事务。roll-backOnCommitFailure的默认值是false,表示即使提交过程中出现异常,也不回滚事务。

...
doCommit(status);
...
}catch (TransactionException ex) {
				// can only be caused by doCommit
				if (isRollbackOnCommitFailure()) {
					doRollbackOnCommitException(status, ex);
				}
				else {
					triggerAfterCompletion(status, TransactionSynchronization.STATUS_UNKNOWN);
				}
				throw ex;
			}

留下回复