一个类有 录入操作 和 更新操作。
在 录入操作 中会在返回结果之前进行一次 更新操作。
我现在希望的是 录入操作 不会被回滚掉但是更新操作进行回滚。
而且录入操作必须在更新操作之前,不然更新就没有对象了
@Autowired
private xxxDAO dao;
@Autowired
private xxxAPI api;
@Transactional
public void fun(XXX xxx,YYY yyy){
/* do something */
dao.save(xxx);//保存数据到数据库
this.update(yyy);//更新一下数据库的数据(更新方法里会根据另一个模块的结果更新,先执行更新,如果另一个模块返回失败则要把更新的操作回滚掉)
}
@Transactional(propagation = Propagation.NESTED)
public void update(XXX xxx){
/* do something */
dao.update(xxx)
if(!api.xxx){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
/* do something */
}
}
1
zjp 2019-06-19 12:49:51 +08:00 via Android 1
update()要独立回滚,事务传播性得用 requires_new。但是这样又会有隔离性问题,read uncommit 的隔离级别估计不合适。
其实看起来 update()在 fun() 之后执行就能满足… |