Spring學習筆記(十一)

Spring事務管理器實現類

  • org.springframework.orm.jpa.JpaTransactionManager  JPA事務管理類java

  • org.springframework.orm.hibernate3.HibernateTransactionManager Hibernate3.0事務管理類spring

  • org.springframework.orm.jdbc.datasource.DataSourceTransactionManager 使用JDBC、MyBatis等基於數據源的持久化技術的事務管理類數組

  • org.springframework.orm.jdo.JdoTransactionManager 使用JDO進行持久化時,使用該事務管理器學習

  • org.springframework.transaction.jta.JtaTransactionManager 須要跨數據源時使用該事務管理類spa

Spring事務傳播類型

  • PROPAGATION_REQUIRED 若是當前沒有事務,就建立一個事務,若是已經存在一個事務中。就加入這個事務hibernate

  • PROPAGATION_SUPPORTS 若是當前沒有事務就以非事務方式執行代理

  • PROPAGATION_MANDATORY 使用當前事務,若是沒有就拋出異常code

  • PROPAGATION_REQUIRES_NEW 新建事務,若是當前存在事務,就掛起當前事務orm

  • PROPAGATION_NOT_SUPPORTED 以非事務方式執行,若是當前存在事務,就掛起事事務

  • PROPAGATION_NEVER 以非事務方式執行,若是當前存在事務,就拋出異常

  • PROPAGATION_NESTED   若是當前存在事務,則在嵌套事務內執行。若是沒有,就執行PROPAGATION_REQUIRED相似的操做

Spring事務管理的配置

傳統Spring事務配置

        傳統的Spring事務管理配置,通常根據不一樣持久化技術,先聲明一個DataSource,再聲明一個SessionFactory或EntityManagerFactory之類的工廠Bean引用DataSource(JDBC|MyBatis不須要),再聲明一個對應持久化技術的TransactionManager引用Factory或者DataSource。最後都使用org.springframework.transaction.intercepter.TransactionProxyFactory引用TransactionManager,建立代理

<bean id="proxy" class="org.springframework.transaction.intercepter.TransactionProxyFactoryBean"
    p:transactionManager-ref="p:transactionManager"
    p:target-ref="target">
    <property name="transactionAttributes">
        <props>
            <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
            <prop key="*">PROPAGATION_REQUIRED</prop>
        </props>
    </property>
</bean>

如上所示,咱們能夠發現TransactionProxyFactoryBean其實就是根據指定類的靜態方法簽名匹配,爲代理類織入事務管理的代碼,Spring的事務管理其實就是對Spring AOP的一個很好的應用。

基於tx/aop命名空間的配置

        配置Spring事務管理和配置Spring AOP的切面實際上是同樣的固然也能夠使用tx/aop命名空間,有須要請自行學習

使用註解配置聲明式事務

        直接在須要加入事務的方法上面使用@Transactional註解,再在配置文件中加入<tx:annotation-driven transaction-manager="transactionManager"/>或者在配置類上加上@EnableTransactionManagement便可,固然@Transactional註解也能夠用在類上,類上表示類中的全部public的方法都會織入事務代碼。

@Transactional屬性以下:

  • propagation 設定事務傳播行爲,值爲Propagation的枚舉值

  • isolation 設置事務的隔離級別,值爲Isolation的枚舉值

  • readOnly 設置是否爲只讀事務,值爲boolean

  • timeout 設置超時時間,值爲int型,單位爲秒

  • rollbackFor 設定遇到時須要回滾的異常,值爲Class<? extends Exception>[]

  • rollbackForClassName 設定遇到時須要回滾的異常,值爲String[],異常名稱數組

  • noRollbackFor 設定遇到時不須要回滾的異常,值同上rollbackFor

  • noRollbackForClassName ......

相關文章
相關標籤/搜索