韓順平零基礎學java—第二階段框架
阿新 • • 發佈:2022-03-20
Spring 事務管理
事務的隔離級別:4個
-
READ_UNCOMMITTED: 讀未提交。為解決任何併發問題。
-
READ_COMMITTD: 讀已提交。解決髒讀,存在不可重複讀與幻讀
-
REPEATABLE_READ: 可重複讀。解決髒讀、不可重複讀,存在幻讀
-
SERIALIZABLE: 序列話。不存在併發問題。
事務超時時間
預設為-1
事務的傳播行為:7個
- PROPAGATION_REQUIRED 指定方法必須在事務內執行 有事務執行 沒有事務事務
- PROPAGATION_REQUIRED NEW 建立一個自己的事務 當前有事務,掛著 新建事務執行完畢 在執行當前事務
- PROPAGATION_SUPPORTS 支援事務 有事務執行 沒有事務也可執行
- 重點掌握上面三個
- PROPAGATION_MANDATORY PROPAGATION_NESTED PROPAGATION_NEVER PROPAGATION_NOT_SUPPORTED
事務提交,事務回滾的時機
- 方法執行沒有異常丟擲,執行提交事務。 commit
- 方法執行丟擲異常或錯誤,執行事務回滾。 rollback
- 方法丟擲受查異常時,提交事務 寫程式碼的時候必須處理的異常IOException
總結Spring的事務
- 管理事務的時 事務管理和他的實現類
- Spring的事務是一個統一模型
- 指定要使用的事務管理器實現類,使用
- 指定那些類,那些方法需要加入事務的功能
- 指定方法需要的隔離級別,傳播行為,超時
- 指定要使用的事務管理器實現類,使用
Spring框架中提供的處理事務方案
-
適合中小專案使用的,註解方案
- spring框架自己用aop實現給業務方法增加業務的功能,使用@Transactional註解增加事務
- @Transctional註解是spring框架自己的註解,放在public方法的上面,表示當前方法具有事務。可以給註解的屬性賦值,表示具體的隔離級別,傳播行為,異常資訊等
-
適合大型專案使用的,aspectj 需要大量事務配置事務,使用aspectj框架功能,在spring配置檔案中宣告類,方法需要的事務。這種方式業務方法和事務配置完全分離。
-
實現步驟:都是在xml配置檔案中實現的
-
加入依賴
-
宣告事務管理器物件
<bean id="xx" class="DatasourceTransactionManager">
-
宣告方法需要的事務型別(配置方法的事務屬性【隔離級別,傳播行為,超時】)
-
配置aop:指定那些類需要代理
<tx:advice id="myAdvice" transaction-manager="transactionManager"> <tx:attributes> <!--tx:method:給具體方法配置事務屬性,method可以有多個 name:方法名稱 完整方法名稱,可以使用萬用字元 propagation:傳播行為,列舉值 isolation:隔離級別 rollback-for:指定異常的類名,全限定類名。發生異常回滾 --> <tx:method name="" propagation="" isolayion="" rollback-for=""/> </tx:attributes> </tx:advice>
<aop:config> <!--配置切入點表示式:指定那些包中類,要使用事務 id:切入點表示式的名稱,唯一值 expression:切入點表示式,指定那些類要使用事務,aspectj會建立代理物件 --> <aop:pointcut id="sevicePt" expression="execution=(* *..service..*.*(..))"/> <!--配置增強器:關聯advice和pointcut--> <aop:advicor advice-ref="myAdvice" pointcut-ref="sevicePt" </aop:config>
-
-
-
@Transactional
-
織入到public方法中,實現事務管理
- propagation:用於設定事務的傳播屬性。該屬性型別為Propagation列舉,預設值為 Propagation_REQUIRED
- isolation: 用於設定事務的隔離級別。該屬性型別為laolation列舉。預設值為isolation.DEFAULT
- readOnly:用於設定該方法對資料庫的操作是否是隻讀的。該屬性為boolean,預設值false
- timeout:用於設定本操作與資料庫連線的超時時限。單位為秒,型別為int,預設值為-1,即沒有時限
- rollbackFor:執行需要回滾的異常類。型別為CLass[] ,預設值為空陣列。
- rollbackForClassName:指定需要回滾的異常類類名,型別為String[],預設值為空陣列
- noRollbackFor:發生異常不回滾
- noRollbackForClassName:發生不回滾
-
事務@Transactional步驟:
-
需要宣告事務管理器物件:
<bean id="xx" Class="DataSourceTransactionManager"/>
-
開啟事務註解驅動,告訴spring框架,我要使用註解方式管理事務。
-
-