• <noscript id="ecgc0"><kbd id="ecgc0"></kbd></noscript>
    <menu id="ecgc0"></menu>
  • <tt id="ecgc0"></tt>

    springboot事物管理@Transactional

    看了一下springboot的事物辦理,今天總結一下,記實一下利用的體例,很簡單,一個簡單的注解就可以搞心猿意馬了, @Transactional

    顛末測試發現:

    (1)若是不加Transactional注解,則對數據庫的操作會當即更新,之后若是拋出異常也不會回滾;申明,默認環境下,是沒有事物的。

    (2)若是加上Transactional注解,在數據庫更新語句之后拋出RuntimeException,則會更新不當作功,申明,事物生效了。

    (3)一個重點:當利用事物時,呈現了RuntimeException和Error時,則事物會回滾。checked exceptions不會回滾(因為java強制對會拋出checked exceptions的代碼利用try catch;想回滾,可以在catch中拋出前面的異常和錯誤)

    (4)下面經由過程源碼簡單的總結Transactional注解的默認設置裝備擺設,及測試的過程。

    東西/原料

    • Transactional
    • ecplise

    方式/步調

    1. 1

      先看Transactional注解的源碼

      (1)源碼注釋中說:當利用了此注解,碰到了RuntimeException和Error時會回滾。checked exceptions不會回滾。

    2. 2

      (2)按照Target屬性可知,這個注解可以用于潤色方式、類、接口(包羅注解)、列舉類型;一般環境下,最好用到service層的方式上,一個營業一個事物。

    3. 3

      (3)默認的事物傳布機制:REQUIRED。當前沒有事物則開啟一個新的事物;當前有事物則插手到這個已有的事物中。

    4. 4

      (4)只讀事物Transactional(readOnly=true):其實一向質疑只讀事務的感化(一向覺著沒啥用),然后網上找了一下都說是因為,統一個營業中對一條數據多次查詢時,有可能這多次查詢的時候距離中該數據被其他用戶點竄,導致前后查詢到的數據紛歧致,想想很有事理;用只讀事物就可以解決這個問題,包管數據的前后一致性。(若是想避免這個問題,也在代碼中只讀一次,避免多次讀)。

    5. 5

      然后測試Transactional注解的感化:

      (1)不開啟事物,在保留方式中拋出RuntimeException,發現可以保留數據。

    6. 6

      (2)開啟事物,在保留方式中拋出RuntimeException,發現此時保留不了數據。

    • 發表于 2018-05-05 00:00
    • 閱讀 ( 995 )
    • 分類:其他類型

    你可能感興趣的文章

    相關問題

    0 條評論

    請先 登錄 后評論
    admin
    admin

    0 篇文章

    作家榜 ?

    1. xiaonan123 189 文章
    2. 湯依妹兒 97 文章
    3. luogf229 46 文章
    4. jy02406749 45 文章
    5. 小凡 34 文章
    6. Daisy萌 32 文章
    7. 我的QQ3117863681 24 文章
    8. 華志健 23 文章

    聯系我們:uytrv@hotmail.com 問答工具
  • <noscript id="ecgc0"><kbd id="ecgc0"></kbd></noscript>
    <menu id="ecgc0"></menu>
  • <tt id="ecgc0"></tt>
    久久久久精品国产麻豆