最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring學(xué)習(xí)JdbcTemplate數(shù)據(jù)庫事務(wù)參數(shù)

 更新時間:2022年05月30日 10:16:02   作者:把蘋果咬哭的測試筆記  
這篇文章主要為大家介紹了Spring學(xué)習(xí)JdbcTemplate數(shù)據(jù)庫事務(wù)參數(shù)使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

Spring JdbcTemplate數(shù)據(jù)庫事務(wù)參數(shù)

@Transactional() 注解里有不少參數(shù),其中我們常用到的如下:

一、propagation

表示事務(wù)傳播行為。就是說多個事務(wù)方法之間進(jìn)行調(diào)用,這個過程中事務(wù)是如何進(jìn)行管理的。

這里的事務(wù)方法就是指對數(shù)據(jù)庫表數(shù)據(jù)進(jìn)行變化操作的方法。

舉例:

有個 update() 方法:

public void update() {
}

還有個 add() 方法:

public void add() {
  // 調(diào)用了update()方法
  update()
}

那么,現(xiàn)在當(dāng)其中一個方法加上了事務(wù)注解 @Transactional 后,調(diào)用執(zhí)行過程是怎樣的?或者說兩個都加了事務(wù)注解,又該如何?

為了解決問題,spring 事務(wù)傳播行為有 7 種:

  • REQUIRED:默認(rèn)參數(shù)。如果有事務(wù)在運(yùn)行,當(dāng)前方法就在這個事務(wù)內(nèi)運(yùn)行,否則就開啟一個新的事務(wù),并在自己的事務(wù)內(nèi)運(yùn)行。
  • REQUIRES_NEW:當(dāng)前的方法必須在啟動新事務(wù),并在它自己的事務(wù)內(nèi)運(yùn)行,如果有事務(wù)在進(jìn)行,應(yīng)該將它掛起。
  • SUPPORTS:如果有事務(wù)在運(yùn)行,當(dāng)前的方法就在這個事務(wù)內(nèi)運(yùn)行,否則它可以不運(yùn)行在事務(wù)中。
  • NOT_SUPPORTED:當(dāng)前的方法不應(yīng)該運(yùn)行在事務(wù)中,如果有運(yùn)行的事務(wù),將它掛起。
  • MANDATORY:當(dāng)前的方法必須運(yùn)行在事務(wù)內(nèi)部,如果沒有正在運(yùn)行的事務(wù),就拋出異常。
  • NEVER:當(dāng)前的方法不應(yīng)該在事務(wù)中運(yùn)行,如果有運(yùn)行的事務(wù),就拋出異常。
  • NESTED:如果有事務(wù)在運(yùn)行,當(dāng)前的方法就應(yīng)該在這個事務(wù)的嵌套事務(wù)內(nèi)運(yùn)行,否則,就啟動一個新的事務(wù),并在自己的事務(wù)內(nèi)運(yùn)行。

1. REQUIRED

如果有事務(wù)在運(yùn)行,當(dāng)前方法就在這個事務(wù)內(nèi)運(yùn)行,否則就開啟一個新的事務(wù),并在自己的事務(wù)內(nèi)運(yùn)行。

@Transactional(propagation = Propagation.REQUIRED)
public void methodA() {
  methodB();
  // do something
}
@Transactional(propagation = Propagation.REQUIRED)
public void methodB() {
  // do something
}

當(dāng)調(diào)用 methodA 時,因?yàn)楫?dāng)前上下文不存在事務(wù),所以會開啟一個新的事務(wù)。當(dāng)執(zhí)行到 methodB 時,發(fā)現(xiàn)當(dāng)前上下文存在事務(wù),因此就加入到當(dāng)前事務(wù)來執(zhí)行。當(dāng)單獨(dú)調(diào)用 methodB 時,因?yàn)楫?dāng)前上下文不存在事務(wù),所以會開啟一個新的事務(wù)。

2. REQUIRES_NEW

當(dāng)前的方法必須在啟動新事務(wù),并在它自己的事務(wù)內(nèi)運(yùn)行,如果有事務(wù)在進(jìn)行,應(yīng)該將它掛起。

@Transactional(propagation = Propagation.REQUIRED)
public void methodA() {
doSomeThingA();
methodB();
doSomeThingB();
// do something else
}
// 事務(wù)屬性為REQUIRES_NEW
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void methodB() {
    // do something
}

當(dāng)調(diào)用 methodA 時,開啟了 事務(wù) A。執(zhí)行到 methodB 時,開啟一個事務(wù)B,此時事務(wù) A 掛起,當(dāng)事務(wù) B 執(zhí)行完成后,繼續(xù)執(zhí)行事務(wù) A 。

  • 這里的事務(wù) A 稱為外層事務(wù)。
  • 這里的事務(wù) B 則稱為內(nèi)層事務(wù)。

3. SUPPORTS

如果有事務(wù)在運(yùn)行,當(dāng)前的方法就在這個事務(wù)內(nèi)運(yùn)行,否則它可以不運(yùn)行在事務(wù)中。

@Transactional(propagation = Propagation.REQUIRED)
public void methodA() {
 methodB();
// do something
}
// 事務(wù)屬性為SUPPORTS
@Transactional(propagation = Propagation.SUPPORTS)
public void methodB() {
    // do something
}

當(dāng)調(diào)用 methodA 時,methodB 加入到 methodA 的事務(wù)中,事務(wù)的執(zhí)行。當(dāng)單獨(dú)的調(diào)用 methodB 時,methodB方法是非事務(wù)的執(zhí)行的。

4. NOT_SUPPORTED

當(dāng)前的方法不應(yīng)該運(yùn)行在事務(wù)中,如果有運(yùn)行的事務(wù),將它掛起。

  • 當(dāng)調(diào)用 methodA 時,開啟 事務(wù) A。當(dāng)執(zhí)行到 methodB 時,掛起事務(wù)A,以非事務(wù)的方式執(zhí)行 methodB 。
  • 當(dāng)單獨(dú)的調(diào)用 methodB 時,methodB方法是非事務(wù)的執(zhí)行的。

5. MANDATORY

當(dāng)前的方法必須運(yùn)行在事務(wù)內(nèi)部,如果沒有正在運(yùn)行的事務(wù),就拋出異常。

@Transactional(propagation = Propagation.REQUIRED)
public void methodA() {
 methodB();
// do something
}
// 事務(wù)屬性為MANDATORY
@Transactional(propagation = Propagation.MANDATORY)
public void methodB() {
    // do something
}

當(dāng)調(diào)用 methodA 時,methodB 則加入到 methodA 的事務(wù)中,事務(wù)地執(zhí)行。當(dāng)單獨(dú)調(diào)用 methodB 時,因?yàn)楫?dāng)前沒有一個活動的事務(wù),則會拋出異常。

6. NEVER

當(dāng)前的方法不應(yīng)該在事務(wù)中運(yùn)行,如果有運(yùn)行的事務(wù),就拋出異常。

7. NESTED

如果有事務(wù)在運(yùn)行,當(dāng)前的方法就應(yīng)該在這個事務(wù)的嵌套事務(wù)內(nèi)運(yùn)行,否則,就啟動一個新的事務(wù),并在自己的事務(wù)內(nèi)運(yùn)行。

  • 當(dāng)單獨(dú)執(zhí)行 methodB ,開啟事務(wù) B,執(zhí)行。
  • 當(dāng)執(zhí)行 methodA 時,開啟事務(wù) A,執(zhí)行到 methodB,開啟內(nèi)層事務(wù) B。

注意 當(dāng)執(zhí)行 methodA 時,這里是一個嵌套事務(wù)。

如果外層事務(wù)失敗,則會回滾內(nèi)層事務(wù)所做的操作。但是內(nèi)層事務(wù)的失敗不會引起外層事務(wù)的回滾。

二、ioslation

設(shè)置事務(wù)隔離級別。

因?yàn)椴煌氖聞?wù)隔離級別會引起不同的問題,比如:臟讀、不可重復(fù)讀、幻讀。

相關(guān)的內(nèi)容在之前有過介紹,有興趣的可以自行跳轉(zhuǎn)過去:

【Mysql】數(shù)據(jù)庫事務(wù),臟讀、幻讀、不可重復(fù)讀

所以要解決,需要設(shè)置對應(yīng)的隔離級別:

  • READ_UNCOMMITTED: 讀未提交
  • READ_COMMITTED: 讀已提交
  • REPEATABLE_READ: 可重復(fù)讀
  • SERIALIZABLE: 串行化

三、timeout

設(shè)置超時時間。

事務(wù)需要在一定時間內(nèi)進(jìn)行提交,如果沒提交,就回滾。

默認(rèn)值是 -1 ,表示不超時。如果設(shè)置時間,單位是秒(s)。

四、readOnly

設(shè)置是否只讀。

默認(rèn)值 false,表示可以查詢,也可以進(jìn)行添加、修改、刪除操作。

當(dāng)設(shè)置為 true,只可以進(jìn)行查詢操作。

五、rollbackFor

設(shè)置出現(xiàn)哪些異常后就進(jìn)行事務(wù)的回滾。

六、noRollbackFor

設(shè)置出現(xiàn)哪些異常后,不進(jìn)行事務(wù)的回滾。

以上就是Spring學(xué)習(xí)JdbcTemplate數(shù)據(jù)庫事務(wù)參數(shù)的詳細(xì)內(nèi)容,更多關(guān)于Spring JdbcTemplate數(shù)據(jù)庫事務(wù)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解Java中如何正確書寫單例模式

    詳解Java中如何正確書寫單例模式

    一般單例都是五種寫法:懶漢,餓漢,雙重校驗(yàn)鎖,靜態(tài)內(nèi)部類和枚舉。本文整理了幾種常見的單例寫法,下面跟著小編一起來看下吧
    2017-01-01
  • Java多線程下載網(wǎng)圖的完整案例

    Java多線程下載網(wǎng)圖的完整案例

    這篇文章主要給大家介紹了關(guān)于Java多線程下載網(wǎng)圖的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • springboot應(yīng)用中使用過濾器的過程詳解

    springboot應(yīng)用中使用過濾器的過程詳解

    過濾器通常用于實(shí)現(xiàn)跨切面的功能,例如身份驗(yàn)證、日志記錄、請求和響應(yīng)的修改、性能監(jiān)控等,這篇文章主要介紹了springboot應(yīng)用中使用過濾器,需要的朋友可以參考下
    2023-06-06
  • Java實(shí)現(xiàn)的數(shù)組去重與排序操作詳解

    Java實(shí)現(xiàn)的數(shù)組去重與排序操作詳解

    這篇文章主要介紹了Java實(shí)現(xiàn)的數(shù)組去重與排序操作,結(jié)合實(shí)例形式分析了Java針對數(shù)組去重及排序操作相關(guān)遍歷、排序、判斷等使用技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-07-07
  • 一篇文章帶你入門Java封裝

    一篇文章帶你入門Java封裝

    Java面向?qū)ο蟮娜筇匦裕悍庋b、繼承、多態(tài)。下面對三大特性之一封裝進(jìn)行了總結(jié),需要的朋友可以參考下,希望能給你帶來幫助
    2021-08-08
  • Spring的BeanFactoryPostProcessor接口示例代碼詳解

    Spring的BeanFactoryPostProcessor接口示例代碼詳解

    這篇文章主要介紹了Spring的BeanFactoryPostProcessor接口,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • 利用openoffice+jodconverter-code-3.0-bate4實(shí)現(xiàn)ppt轉(zhuǎn)圖片

    利用openoffice+jodconverter-code-3.0-bate4實(shí)現(xiàn)ppt轉(zhuǎn)圖片

    這篇文章主要為大家詳細(xì)介紹了利用openoffice+jodconverter-code-3.0-bate4實(shí)現(xiàn)ppt轉(zhuǎn)圖片,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • 帶你入門Java的方法

    帶你入門Java的方法

    這篇文章主要介紹了java基礎(chǔ)之方法詳解,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-07-07
  • java實(shí)現(xiàn)zip,gzip,7z,zlib格式的壓縮打包

    java實(shí)現(xiàn)zip,gzip,7z,zlib格式的壓縮打包

    本文是利用Java原生類和apache的commons實(shí)現(xiàn)zip,gzip,7z,zlib的壓縮打包,如果你要是感興趣可以進(jìn)來了解一下。
    2016-10-10
  • Java實(shí)現(xiàn)視頻自定義裁剪功能

    Java實(shí)現(xiàn)視頻自定義裁剪功能

    這篇文章主要介紹了如何通過java實(shí)現(xiàn)視頻裁剪,可以將視頻按照自定義尺寸進(jìn)行裁剪,文中的示例代碼簡潔易懂,感興趣的可以了解一下
    2022-01-01

最新評論

博罗县| 高淳县| 天柱县| 达拉特旗| 郸城县| 阳江市| 朝阳市| 读书| 读书| 通山县| 涡阳县| 鸡西市| 抚远县| 达孜县| 大足县| 依安县| 洛扎县| 伊宁县| 南江县| 嘉义县| 扎兰屯市| 长宁县| 盐池县| 遵义县| 阿拉尔市| 嘉善县| 平乐县| 安阳市| 沂源县| 岳阳县| 平顶山市| 岳阳市| 罗源县| 茶陵县| 新化县| 诸暨市| 崇仁县| 贺州市| 阿城市| 景泰县| 武邑县|