spring mvc事務注解


@Transactional(noRollbackFor=RuntimeException.class)方法事務說明
@Transactional(RollbackFor=Exception.class)
@Transactional(readOnly=true)
@Transactional(timeout=100)
@Transactional(isolation)數據庫的隔離級別
{
 

  Read Uncommited:讀取未提交的數據(會出現臟讀 不可重復讀 幻讀)
   Read Commited:讀已提交的數據(會出現不可重復讀和幻讀)
   Repeatable Read:可重復讀(會出現幻讀)
   Serializable:串行化
}

臟讀:一個事務讀取到另外一個事務未提交的更新的數據
不可重復讀:在同一事務中,多次讀取同一個數據返回結果有所不同,就是后續的讀取可以讀到另外一個事務的已經的已經提交的更新數據
可重復讀:在同一個事務多次讀取數據時,能夠保證所讀取的數據一樣,也就是后讀取的不能讀到另外一個事務已經提交的數據
幻讀:一個事務讀取到另外一個事務已經提交的更新的數據

針對查詢方法
@Transactional(propagation=Propagation.NOT_SUPPORTED)針對某個方法不開啟事務
@Transactional(propagation=Propagation.REQUIRED)默認的事務支持

例子:
public class Bean1 {
  @Transactional(propagation=Propagation.Required)
  public void update() {
     executeUpdate(SQL);
  }
}
public class Bean2 {
  @Transactional(propagation=Propagation.SUPPORTS)
  public void update() {
     executeUpdate(SQL);
  }
}

public class Transaction {
  @Transactional(propagation=Propagation.REQUIRES_NEW)
  public void test1()
  {
     bean1.update();
     bean2.update();
  }
   @Transactional(propagation=Propagation.NOT_SUPPORTED)
  public void test2()
  {
     bean1.update();
     bean2.update();
   }
   @Transactional(propagation=Propagation.SUPPORTS)
   public void test3()
   {
      bean1.update();
      bean2.update();
    }
}

//事務傳播屬性
@Transactional(propagation=Propagation.REQUIRED)//如果有事務,那么加入事務,沒有的話新創建一個
@Transactional(propagation=Propagation.NOT_SUPPORTED)//這個方法不開啟事務
@Transactional(propagation=Propagation.REQUIREDS_NEW)//不管是否存在事務,都創建一個新的事務,原來的掛起,新的執行完畢,繼續執行老的事務
@Transactional(propagation=Propagation.MANDATORY)//必須在一個已有的事務中執行,否則拋出異常
@Transactional(propagation=Propagation.NEVER)//不能在一個事務中執行,就是當前必須沒有事務,否則拋出異常
@Transactional(propagation=Propagation.SUPPORTS)//其他bean調用這個方法,如果在其他bean中聲明了事務,就是用事務。沒有聲明,就不用事務。
@Transactional(propagation=Propagation.NESTED)//如果一個活動的事務存在,則運行在一個嵌套的事務 中,如果沒有活動的事務,則按照REQUIRED屬性執行,它使用一個單獨的事務。這個書屋擁有多個回滾的保存點,內部事務的回滾不會對外部事務造成影 響,它只對DataSource TransactionManager事務管理器起效。
@Transactional(propagation=Propagation.REQUIRED,readOnly=true)//只讀,不能更新,刪除
@Transactional(propagation=Propagation.REQUIRED,timeout=30)//超時30秒
@Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.DEFAULT)//數據庫隔離級別


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM