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; }