天天看點

SpringBoot 學習筆記三:RESTful和Transactional注解

一、RESTful API簡述

  1. 所有的東西都是資源,所有的操作都是對資源的增删改查(CRUD)。
  2. 對資源的增加、删除、修改、查詢對應着POST、DELETE、POT、GET。
  3. 無狀态(針對狀态的web開發而言)
    1. 在基于狀态的Web服務中,Client與Server互動的資訊(如:使用者登入狀态)會儲存在Server的Session中。再這樣的前提下,Client中的使用者請求隻能被儲存有此使用者相關狀态資訊的伺服器所接受和了解。
    2. 在無狀态的Web服務中,每一個Web請求都必須是獨立的,請求之間是完全分離的。Server沒有儲存Client的狀态資訊,是以Client發送的請求必須包含有能夠讓伺服器了解請求的全部資訊,包括自己的狀态資訊。使得一個Client的Web請求能夠被任何可用的Server應答,進而将Web系統擴充到大量的Client中

二、@Transactional 注解

  1. 屬性
    1. name :當在配置檔案中有多個 TransactionManager , 可以用該屬性指定選擇哪個事務管理器。
    2. progatation : 事務的傳播行為,預設值REQUIRED。
      1. 事務傳播行為類型 說明
        PROPAGATION_REQUIRED 如果目前沒有事務,就建立一個事務,如果已經存在一個事務中,加入到這個事務中。這是最常見的選擇。
        PROPAGATION_SUPPORTS 支援目前事務,如果目前沒有事務,就以非事務方式執行。
        PROPAGATION_MANDATORY 使用目前的事務,如果目前沒有事務,就抛出異常。
        PROPAGATION_REQUIRES_NEW 建立事務,如果目前存在事務,把目前事務挂起。
        PROPAGATION_NOT_SUPPORTED 以非事務方式執行操作,如果目前存在事務,就把目前事務挂起。
        PROPAGATION_NEVER 以非事務方式執行,如果目前存在事務,則抛出異常。
        PROPAGATION_NESTED 如果目前存在事務,則在嵌套事務内執行。如果目前沒有事務,則執行與PROPAGATION_REQUIRED類似的操作。
    3. isolation :事務的隔離度。
      1. 隔離級别
        isolation_default 使用資料庫預設的事務隔離級别
        isolation_read_uncommitted 允許讀取尚未送出的修改,可能導緻髒讀、幻讀和不可重複讀
        isolation_read_committed  允許從已經送出的事務讀取,可防止髒讀、但幻讀,不可重複讀仍然有可能發生
        isolation_repeatable_read 對相同字段的多次讀取的結果是一緻的,除非資料被目前事務自生修改。可防止髒讀和不可重複讀,但幻讀仍有可能發生
        isolation_serializable  完全服從acid隔離原則,確定不發生髒讀、不可重複讀、和幻讀,但執行效率最低。
      2. 髒讀、幻讀及不可重複讀
        髒讀 指當一個事務正字通路資料,并且對資料進行了修改,而這種資料還沒有送出到資料庫中,這時,另外一個事務也通路這個資料,然後使用了這個資料。因為這個資料還沒有送出那麼另外一個事務讀取到的這個資料我們稱之為髒資料。依據髒資料所做的操作肯能是不正确的。
        不可重複讀 指在一個事務内,多次讀同一資料。在這個事務還沒有執行結束,另外一個事務也通路該同一資料,那麼在第一個事務中的兩次讀取資料之間,由于第二個事務的修改第一個事務兩次讀到的資料可能是不一樣的,這樣就發生了在一個事物内兩次連續讀到的資料是不一樣的,這種情況被稱為是不可重複讀。
        幻讀 一個事務先後讀取一個範圍的記錄,但兩次讀取的紀錄數不同,我們稱之為幻象讀(兩次執行同一條 select 語句會出現不同的結果,第二次讀會增加一資料行,并沒有說這兩次執行是在同一個事務中)
    4. timeout :事務的逾時時間,預設值為-1。如果超過該時間限制但事務還沒有完成,則自動復原事務。
    5. read-only :指定事務是否為隻讀事務,預設值為 false;為了忽略那些不需要事務的方法,比如讀取資料,可以設定 read-only 為 true。
    6. rollback-for :用于指定能夠觸發事務復原的異常類型,如果有多個異常類型需要指定,各類型之間可以通過逗号分隔。
    7. no-rollback- for :抛出 no-rollback-for 指定的異常類型,不復原事務。
  2. Transactional 支援類級别上,表示所有該類的公共方法都配置相同的事務屬性資訊。
  3. Transactional 應用在public方法上
@Transactional(rollbackFor=SQLException.class)
 @Transactional(rollbackFor=RuntimeException.class, noRollbackFor=NullPointerException.class)
 @Transactional(propagation=Propagation.REQUIRES_NEW, timeout=5000)
           

參考部落格:https://blog.csdn.net/Jmilk/article/details/50461577 

(網易雲免費課堂)參考資料:http://study.163.com/course/courseMain.htm?courseId=1005213034

參考:(spring事務隔離級别、傳播機制以及簡單配置_不積跬步 無以至千裡-CSDN部落格_spring設定事務隔離級别)

參考:IBM Developer 正在整合其語言站點組合。 – IBM Developer