Spring事務隔離級別、傳播機制、實現方式


  Spring時使用AOP來代理事務控制,針對接口和類,所以在同一個service類的兩個方法的調用,傳播機制不生效。

一、Spring事務隔離級別

  1. ISOLATION_DEFAULT:  默認的隔離級別,使用數據庫默認的事務隔離級別。

  2. ISOLATION_READ_UNCOMMITTED: 未提交讀,允許一個事務讀取另外一個事務未提交的數據,或造成臟讀、幻讀、不可重復讀。

  3. ISOLATION_COMMITTED: 提交讀,保證一個事務修改的數據提交后才能被另外一個事務讀取。另外一個事務不能讀取該事務未提交的數據。防止臟讀。

  4. ISOLATION_RETETABLE_READ: 可重復讀,可以防止臟讀、不可重復讀,但是還會造成幻讀。

  5. ISOLATION_SERIALIZABLE: 串行事務,事務串行執行,防止臟讀、不可重復讀、幻讀。

 

二、Spring事務傳播機制--參考鏈接--

  (需要事務加入)

  1. REQUIRED: 如果當前有事務就加入事務,如果沒有事務則創建一個新的。

  2. REQUIRES_NEW: 創建一個新的事務,如果當前存在事務,則把當前事務掛起。

  (嵌套事務)

  3. NESTED: 如果當前存在事務,則創建一個事務作為當前事務的嵌套事務來運行。如果沒有事務,相當於REQUIRED。

  (支持,如果有就支持,如果沒有就算了)

  4.SUPPORTS: 如果當前存在事務,則加入該事務。如果當前沒有事務,則以非事務的方式進行。

  (不支持)

  5. NOT_SUPPORTS: 以非事務方式運行。如果當前有事務,則把當前事務掛起。

  (強制性的,一定要有,沒有就拋異常)

  6. MANDATORY:如果當前存在事務,則運行在當前事務中。如果沒有事務,則拋出異常。

  (從不,比NOT_SUPPORT更硬,直接異常)

  7. NEVER: 以非事務方式運行,如果當前存在事務,則拋出異常,即父級方法必須無事務。

 

三、實現方式

  1. 聲明式事務:@Transactional(propagation = Propagation.REQUIRED)

  2. AOP實現事務

<bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dateSource"></property>
</bean>
<tx:advice id="stockAdvice" transaction-manager="dataSourceTransactionManager"> <tx:attributes> <tx:method name="by*" isolation="DEFAULT" propagation="REQUIRED" rollback-for="MyExepction"/> <tx:method name="select*" isolation="DEFAULT" propagation="REQUIRED" read-only="true"></tx:method> </tx:attributes
</tx:advice>
<aop:config> <aop:pointcut id="exAdvice" expression="execution(* *..service.*.*(..))"></aop:pointcut> <aop:advisor advice-ref="stockAdvice" pointcut-ref="exAdvice"></aop:advisor> </aop:config>

 

  3. 事務代理工程Bean實現事務

<bean id="tproxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager" ref="dataSourceTransactionManager"></property>&lt;!&ndash;寫的是事務&ndash;&gt;
    <property name="target" ref="byStockService"></property>&lt;!&ndash;要進行事務的類&ndash;&gt;
   <property name="transactionAttributes">
    <props>//key寫的是service層要增強的方法 事務的隔離級別,后面逗號后面是異常類,用於回滾數據&ndash;&gt;
          <prop key="ByStock">ISOLATION_DEFAULT,PROPAGATION_REQUIRED,-MyExepction</prop>
      </props>
   </property>
</bean>

 


免責聲明!

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



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