最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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中怎么聲明隔離級別和傳播行為的評論 (共 條)

分享到微博請遵守國家法律
新营市| 土默特左旗| 嘉义县| 社旗县| 开阳县| 萨迦县| 越西县| 崇信县| 遂川县| 嘉兴市| 宝坻区| 高安市| 南陵县| 高雄县| 固镇县| 留坝县| 屯门区| 南充市| 石泉县| 苗栗县| 紫金县| 平湖市| 大冶市| 卓资县| 侯马市| 阳城县| 宁武县| 乌海市| 手游| 黄大仙区| 论坛| 克什克腾旗| 元氏县| 阜新市| 苏尼特右旗| 青神县| 东阿县| 普兰县| 镇康县| 日照市| 沙田区|