当某个spring方法为private时,或 调用某个方法未通过代理调用时,则无法使用@Transactional的方式处理事务,而需要手动处理,具体方式如下
//指定事务对应的数据库连接
@Resource(name = "driverMallTx")
private PlatformTransactionManager transactionManager;
private void dth(){
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
// 设置隔离级别等属性
def.setIsolationLevel(TransactionDefinition.ISOLATION_REPEATABLE_READ);
TransactionStatus status = transactionManager.getTransaction(def);
boolean success = true;
try {
doSomeThing();
} catch (Exception e) {
success = false;
throw e;
}finally {
if(success){
transactionManager.commit(status);
}else {
transactionManager.rollback(status);
}
}
}