五月天青色头像情侣网名,国产亚洲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中怎么聲明隔離級別和傳播行為的評論 (共 條)

分享到微博請遵守國家法律
滨海县| 曲靖市| 车险| 潜山县| 谢通门县| 丰宁| 苗栗市| 胶南市| 卓尼县| 洛宁县| 永新县| 峨边| 开鲁县| 平阴县| 祥云县| 兰溪市| 沾化县| 茶陵县| 华蓥市| 鄂温| 伊吾县| 海伦市| 平遥县| 加查县| 平山县| 古浪县| 玉树县| 博客| 沂南县| 广安市| 辉县市| 长宁县| 江都市| 古田县| 霸州市| 沅江市| 阿鲁科尔沁旗| 澄江县| 会同县| 镇沅| 台安县|