Spring事务,手动和自动
@Transactional事务
- @Transactional手动回滚
@Transactional(rollbackFor = Exception.class)
public int xxxMethod() {
try {
...
doSomthingInDB();
...
return 1;
} catch(Exception e) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
return 0;
}
- @Transactional自动回滚
@Transactional(rollbackFor = Exception.class)
public int xxxMethod() {
try {
...
doSomthingInDB();
...
return 1;
} catch(Exception e) {
throw new RuntimeException(e.getMessage());
}
return 0;
}
- @Transactional嵌套回滚
@Transactional(rollbackFor = Exception.class)
public int xxxMethod() {
try {
...
doSomthingInDB();
...
} catch(Exception e) {
if (TransactionAspectSupport.currentTransactionStatus().isNewTransaction()) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
} else {
throw e;
}
}
return 0;
}
2. 手动事务 TransactionManager
@Autowired
private DataSourceTransactionManager transactionManager;
public String xxxMethod(){
DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
definition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
TransactionStatus status = transactionManager.getTransaction(definition);
try{
...
doSomthingInDB();
...
if (业务不满足) {
...
transactionManager.rollback(transactionStatus);
}
transactionManager.commit(transactionStatus);
} catch (Exception e) {
transactionManager.rollback(transactionStatus);
}
}