五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

面試記錄:在spring中怎么聲明隔離級別和傳播行為

2022-09-28 10:14 作者:喜歡安靜の泡面君  | 我要投稿

應(yīng)該是接著上個問題問的: 數(shù)據(jù)庫的隔離級別,但是我-------------
直接不會,之前寫項(xiàng)目也沒考慮過用事物。(菜死了)



Spring中事物管理的方式



在 Spring 中,事物管理有兩種方式,編程式事物管理和聲明式事物管理

編程式事物管理:在代碼中使用 TransactionTemplate或者 TransactionManager 配合異常處理手動管理事物,不推薦。
聲明式事物管理:使用注解進(jìn)行事物管理,建立在AOP上對方法前后進(jìn)行攔截,然后在目標(biāo)方法開始之前創(chuàng)建或者加入一個事物,在執(zhí)行完目標(biāo)方法后根據(jù)執(zhí)行情況提交或者回滾事物.

使用 @Transactional 注解

使用方式:

  • 在啟動類上添加@EnableTransactionManagement注解。

  • 用于類上時,該類的所有 public 方法將都具有該類型的事務(wù)屬性,同時,我們也可以在方法級別使用該標(biāo)注來覆蓋類級別的定義。

  • 在項(xiàng)目中,@Transactional(rollbackFor=Exception.class),如果類加了這個注解,那么這個類里面的方法拋出異常,就會回滾,數(shù)據(jù)庫里面的數(shù)據(jù)也會回滾。

  • 在@Transactional注解中如果不配置rollbackFor屬性,那么事物只會在遇到RuntimeException的時候才會回滾,加上rollbackFor=Exception.class,可以讓事物在遇到非運(yùn)行時異常時也回滾


隔離級別

數(shù)據(jù)庫隔離級別

即之前文章中的四種隔離級別以及一種默認(rèn)的隔離級別。
Spring 中定義了一個 Isolation 枚舉類來幫助程序員使用。


  • TransactionDefinition.ISOLATION_DEFAULT :使用后端數(shù)據(jù)庫默認(rèn)的隔離級別,MySQL 默認(rèn)采用的 REPEATABLE_READ 隔離級別 Oracle 默認(rèn)采用的 READ_COMMITTED 隔離級別.

  • TransactionDefinition.ISOLATION_READ_UNCOMMITTED :最低的隔離級別,同上文TransactionDefinition.ISOLATION_READ_COMMITTED : 允許讀取并發(fā)事務(wù)已經(jīng)提交的數(shù)據(jù),同上文

  • TransactionDefinition.ISOLATION_REPEATABLE_READ : 對同一字段的多次讀取結(jié)果都是一致的,同上文

  • TransactionDefinition.ISOLATION_SERIALIZABLE : 最高的隔離級別,事物同步執(zhí)行,同上文。


傳播行為

傳播行為是為了解決業(yè)務(wù)層中方法互相調(diào)用的事物問題。
主要體現(xiàn)在事物方法被另一個事物方法調(diào)用上。

Spring 同樣定義了注解來輔助配置


  • TransactionDefinition.PROPAGATION_REQUIRED? :? 使用最多,@Transactional注解默認(rèn)的事務(wù)傳播行為。如果當(dāng)前存在事務(wù),則加入該事務(wù);如果當(dāng)前沒有事務(wù),則創(chuàng)建一個新的事務(wù)。

  • TransactionDefinition.PROPAGATION_REQUIRES_NEW??:? 創(chuàng)建一個新的事務(wù),如果當(dāng)前存在事務(wù),則把當(dāng)前事務(wù)掛起。也就是說不管外部方法是否開啟事:務(wù),Propagation.REQUIRES_NEW修飾的內(nèi)部方法會新開啟自己的事務(wù),且開啟的事務(wù)相互獨(dú)立,互不干擾。

  • TransactionDefinition.PROPAGATION_NESTED?:?? 如果當(dāng)前存在事務(wù),則創(chuàng)建一個事務(wù)作為當(dāng)前事務(wù)的嵌套事務(wù)來運(yùn)行;如果當(dāng)前沒有事務(wù),則該取值等價

  • TransactionDefinition.PROPAGATION_MANDATORY??:? 如果當(dāng)前存在事務(wù),則加入該事務(wù);如果當(dāng)前沒有事務(wù),則拋出異常。(mandatory:強(qiáng)制性)這個使用的很少

  • TransactionDefinition.PROPAGATION_SUPPORTS?:?? 如果當(dāng)前存在事務(wù),則加入該事務(wù);如果當(dāng)前沒有事務(wù),則以非事務(wù)的方式繼續(xù)運(yùn)行

  • TransactionDefinition.PROPAGATION_NOT_SUPPORTED?:?? 以非事務(wù)方式運(yùn)行,如果當(dāng)前存在事務(wù),則把當(dāng)前事務(wù)掛起。

  • TransactionDefinition.PROPAGATION_NEVER??:? 以非事務(wù)方式運(yùn)行,如果當(dāng)前存在事務(wù),則拋出異常

后三種傳播行為有事物失效的風(fēng)險




面試記錄:在spring中怎么聲明隔離級別和傳播行為的評論 (共 條)

分享到微博請遵守國家法律
沅江市| 裕民县| 呼伦贝尔市| 左权县| 丰都县| 南昌县| 遂平县| 南漳县| 寿宁县| 广州市| 长汀县| 茶陵县| 盐池县| 湄潭县| 井研县| 十堰市| 新巴尔虎右旗| 青田县| 马山县| 七台河市| 温州市| 衢州市| 桐庐县| 临江市| 江口县| 高尔夫| 即墨市| 肇东市| 建平县| 永川市| 鹤岗市| 邯郸市| 莱西市| 祁阳县| 板桥市| 宁国市| 安顺市| 彭山县| 隆安县| 祥云县| 承德市|