TransactionDefinition.PROPAGATION_NESTED
内部中只设置savepoint,并没有真正独立的commit。
效果:内层抛异常,则内层回滚,不影响外层继续执行;内层之后的外层如果抛异常,则连带内层一起回滚。
示例:
TransactionTemplate tt = new TransactionTemplate(ptm);
tt.setPropagationBehavior(TransactionDefinition.PROPAGATION_NESTED);
String exeRst = tt.execute( new TransactionCallback() {。。。
此时内部不能使用transactionStatus.setRollbackOnly()进行显示回滚,这会使外部事务也整体回滚;
而要用抛异常或platformTransactionManager.rollback(nestedStatus)来只回滚到savepoint。
spring配置文件DataSourceTransactionManager内部加:
<property name="nestedTransactionAllowed" value="true"/>
或:
dataSourceTransactionManager.setNestedTransactionAllowed(true);
Top comments (0)