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 ......

相关文章
相关标签/搜索