Spring事務傳播屬性

Spring 對事務控制的支持統一在 TransactionDefinition 類中描述,該類有如下幾個重要的接口方法:框架

  • int getPropagationBehavior():事務的傳播行爲
  • int getIsolationLevel():事務的隔離級別
  • int getTimeout():事務的過時時間
  • boolean isReadOnly():事務的讀寫特性。

DefaultTransactionDefinition能夠看到默認配置,spa

private int propagationBehavior = PROPAGATION_REQUIRED;代理

 

除了事務的傳播行爲外,事務的其它特性 Spring 是藉助底層資源的功能來完成的,Spring 無非只充當個代理的角色。可是事務的傳播行爲倒是 Spring 憑藉自身的框架提供的功能,是 Spring 提供給開發者最珍貴的禮物。接口

所謂事務傳播行爲就是多個事務方法相互調用時,事務如何在這些方法間傳播。Spring 支持 7 種事務傳播行爲:事務

  • PROPAGATION_REQUIRED 若是當前沒有事務,就新建一個事務,若是已經存在一個事務中,加入到這個事務中。這是最多見的選擇。
  • PROPAGATION_SUPPORTS 支持當前事務,若是當前沒有事務,就以非事務方式執行。
  • PROPAGATION_MANDATORY 使用當前的事務,若是當前沒有事務,就拋出異常。
  • PROPAGATION_REQUIRES_NEW 新建事務,若是當前存在事務,把當前事務掛起。
  • PROPAGATION_NOT_SUPPORTED 以非事務方式執行操做,若是當前存在事務,就把當前事務掛起。
  • PROPAGATION_NEVER 以非事務方式執行,若是當前存在事務,則拋出異常。
  • PROPAGATION_NESTED 若是當前存在事務,則在嵌套事務內執行。若是當前沒有事務,則執行與 PROPAGATION_REQUIRED 相似的操做。

Spring 默認的事務傳播行爲是 PROPAGATION_REQUIRED,它適合於絕大多數的狀況。假設 ServiveX#methodX() 都工做在事務環境下(即都被 Spring 事務加強了),假設程序中存在以下的調用鏈:Service1#method1()->Service2#method2()->Service3#method3(),那麼這 3 個服務類的 3 個方法經過 Spring 的事務傳播機制都工做在同一個事務中。資源

相關文章
相關標籤/搜索