1.demo位址
github位址
2. 事務不生效
spring 預設通過動態**的方式實現 aop,對目標方法進行增強,private 方法無法被**到,spring 自然也無法動態增強事務處理邏輯
/**
* 一、事務不生效 1、spring 預設通過動態**的方式實現 aop,對目標方法進行增強,private 方法無法被**到,
* spring 自然也無法動態增強事務處理邏輯
** @param name
* @return
*/public
intcreateuserwrong1
(string name)
catch
(exception ex)
", ex.
getmessage()
);}return userrepository.
findbyname
(name)
.size()
;}// 這裡不生效,不會被**到
@transactional
private
void
createuserprivate
(userentity userentity)
}
必須通過**過的類從外部呼叫目標方法才能生效
/**
* 一、事務不生效 2、必須通過**過的類從外部呼叫目標方法才能生效
** @param name
* @return
*/public
intcreateuserwrong2
(string name)
catch
(exception ex)
", ex.
getmessage()
);}return userrepository.
findbyname
(name)
.size()
;}@transactional
public
void
createuserpublic
(userentity userentity)
}
spring 通過 cglb 通過繼承方式實現,private 在子類中不可見,自然無法進行事務增強, this 代表物件自己,spring 不可能注入 this,所以通過this方法訪問的必然不是**
@autowired
private userservice self;
/** * spring 通過 cglb 通過繼承方式實現,private 在子類中不可見,自然無法進行事務增強
* this 代表物件自己,spring 不可能注入 this,所以通過this方法訪問的必然不是**
** @param name
* @return
*/public
intcreateuserright
(string name)
catch
(exception ex)
", ex.
getmessage()
);}return userrepository.
findbyname
(name)
.size()
;}@transactional
public
void
createuserpublic
(userentity userentity)
}
3. 事務異常不回滾
異常必須丟擲**獲,或者手動設定回滾 transactionaspectsupport.currenttransactionstatus().setrollbackonly();
/**
* 二、事務異常不回滾 1、異常必須丟擲**獲,或者手動設定回滾
** @param userentity
*/@transactional
public
void
createuserpublic1
(userentity userentity)
catch
(exception ex)
預設捕獲 runtimeexception 和 error ,如果捕獲 checkedexception 需要通過註解設定 rollbackfor=exception.class
/**
* 二、事務異常不回滾 2、預設捕獲 runtimeexception 和 error ,
* 如果捕獲 checkedexception 需要通過註解設定 rollbackfor=exception.class
** @param userentity
* @throws ioexception
*/// @transactional(rollbackon = exception.class) // 解決:手動指定,可以回滾
@transactional
//原因:受檢查異常 預設不會回滾
public
void
createuserpublic2
(userentity userentity)
throws ioexception
private
void
orthertask()
throws ioexception
4. 事務傳播屬性配置
參考文章
spring 中的事務傳播
spring事務管理(詳解+例項)
@transactional 同乙個類中無事務方法a()內部呼叫有事務方法b()的問題
todo
5. controller呼叫多個service的事務方法
一般service方法是有事務的,把所有操作封裝在乙個service方法中是比較安全的。 如果在controller中呼叫多個service方法,只有查詢的情況下是可以這樣的。
Spring宣告式事務
net.sf.hibernate.dialect.oracle9dialect false true net.sf.hibernate.transaction.jdbctransactionfactory 1025 用heibernate來管理事務 當用spring和heibernate一起完成da...
spring宣告式事務
1.什麼是事務 事務是程式中一系列嚴密的操作,所有操作執行必須成功完成,否則在每個操作所做的更改將會被撤銷,這也是事務的原子性 要麼成功,要麼失敗 2.事務的特性 事務特性分為四個 原子性 atomicity 一致性 consistency 隔離性 isolation 持續性 durability ...
Spring 宣告式事務
propagation 事務傳播機制有如下幾種 required 預設值,表示如果存在乙個事務,則支援當前事務 如果沒有事務,則開啟乙個新事務。requires new 表示總是開啟乙個新的事務,如果乙個事務已經存在,則將這個存在的事務掛起,開啟新事務執行該方法。mandatory 表示如果存在乙個...