一、根据实际业务场景,添加以下代码手动回滚事务:
//手动回滚事务
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
二、手动控制事务管理,提交或回滚
1、代码案例
@Autowired
private DataSourceTransactionManager dataSourceTransactionManager;
@Autowired
private TransactionDefinition transactionDefinition;
@Override
public void testMultiThreadTransactional() {
//事务状态
TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
//验证手动控制事务 start
try {
SysUserInfo sysUserInfo = new SysUserInfo();
sysUserInfo
.setUserName("张三")
.setPwd("123456")
.setRemark("测试用户备注");
this.save(sysUserInfo);
List<SysUserAddress> sysUserAddressList = Lists.newArrayList();
sysUserAddressList.add(new SysUserAddress(sysUserInfo.getId(), "上海市", "上海市", "浦东新区"));
sysUserAddressList.add(new SysUserAddress(sysUserInfo.getId(), "浙江省", "杭州市", "富阳区"));
sysUserAddressService.saveBatch(sysUserAddressList);
int i = 1 / 0;
dataSourceTransactionManager.commit(transactionStatus);
} catch (Exception e) {
dataSourceTransactionManager.rollback(transactionStatus);
e.printStackTrace();
}
//验证手动控制事务 end
}
说明:
1、如果程序不出异常,会正常提交。如果出异常,则会回滚
2、使用手动控制事务管理,不需要使用声明式事务 @Transactional()