附录:spring事务传播机制
一、加@Transactional
注解
@Transactional(rollbackFor = RollBackException.class,propagation = Propagation.REQUIRED)
public Boolean execute(){
try {
} catch (Exception e) {
log.error("xxxxxx",e);
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
return true;
}
二、手动事务
推荐的手动开启事务方式
@Autowired
private DataSourceTransactionManager dataSourceTransactionManager;
@Autowired
TransactionDefinition transactionDefinition;
public Boolean execute(){
TransactionStatus transactionStatus = null;
try {
transactionStatus =dataSourceTransactionManager.getTransaction(transactionDefinition);
dataSourceTransactionManager.commit(transactionStatus);
} catch (Exception e) {
log.error("xxxxxx",e);
if (ts != null) {
dataSourceTransactionManager.rollback(ts);
}
throw new RollBackException("发生异常了肿么办!!!");
}
return true;
}
另一种,使用TransactionTemplate.execute()
编程式事务
@Autowired
private TransactionTemplate transactionTemplate;
public Boolean execute() {
transactionTemplate.execute(new TransactionCallback<Object>() {
@Override
public Object doInTransaction(TransactionStatus status) {
if (true) {
status.setRollbackOnly();
}
return null;
}
});
return true;
}