zoukankan      html  css  js  c++  java
  • spring配置声明式事务

     

    1、声明式事务配置

    配置SessionFactory

    配置事务管理器

    事务的传播特性

    那些类那些方法使用事务(spring事务配置在默认状态下,只有抛出运行时异常时才会回滚)

     

    2、编写业务逻辑方法

    继承HibernateDaoSupport类,使用HibernateTemplate来持久化,HibernateTemplateHibernate Session的轻量级封装

    默认情况下运行期异常才会回滚(包括继承了RuntimeException子类),普通异常是不会滚的

    编写业务逻辑方法时,最好将异常一直向上抛出,在表示层(struts)处理

    关于事务边界的设置,通常设置到业务层,不要添加到Dao上  

     

    3、了解事务的几种传播特性

    1.PROPAGATION_REQUIRED: 如果存在一个事务,则支持当前事务。如果没有事务则开启(使用最多)

    2.PROPAGATION_SUPPORTS: 如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行

    3.PROPAGATION_MANDATORY: 如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。

    4.PROPAGATION_REQUIRES_NEW: 总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。

    5.PROPAGATION_NOT_SUPPORTED: 总是非事务地执行,并挂起任何存在的事务。

    6.PROPAGATION_NEVER: 总是非事务地执行,如果存在一个活动事务,则抛出异常

    7.PROPAGATION_NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中如果没有活动事务则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行

     

    4Spring事务的隔离级别

    1.ISOLATION_DEFAULT: 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.另外四个与JDBC的隔离级别相对应

    2.ISOLATION_READ_UNCOMMITTED: 这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻像读。

    3.ISOLATION_READ_COMMITTED: 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据(使用最多)

    4.ISOLATION_REPEATABLE_READ: 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)

    5.ISOLATION_SERIALIZABLE 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。 除了防止脏读,不可重复读外,还避免了幻像读。

     

    <?xml version="1.0" encoding="UTF-8"?>
    
    <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:aop="http://www.springframework.org/schema/aop"
             xmlns:tx="http://www.springframework.org/schema/tx"
             xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
               http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
               http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
        
        <!-- 配置SessionFactory -->
        <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
            <property name="configLocation">
                <!-- 要使用hibernate,必须先注入hibernate的配置文件 -->
                <value>classpath:hibernate.cfg.xml</value>
            </property>    
        </bean>      
        
        <!-- 配置事务管理器 -->
        <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
            <!-- 将sessionFactory注入给事务管理器 -->
            <property name="sessionFactory" ref="sessionFactory" />
        </bean>
        
        <!-- 配置事务的传播特性,与事务管理器绑定 -->
        <tx:advice id="txAdvice" transaction-manager="transactionManager">
            <tx:attributes>
                <!-- 增删改都配置成传播特性REQUIRED -->
                <tx:method name="add*" propagation="REQUIRED"/>
                <tx:method name="del*" propagation="REQUIRED"/>
                <tx:method name="modify*" propagation="REQUIRED"/>
                <!-- 其它的配置成只读性事务 -->
                <tx:method name="*" read-only="true"/>
            </tx:attributes>
        </tx:advice>
        
        <!-- 配置哪个事务的那些方法是用事务 ,一般情况配置到业务方法上-->
        <aop:config>
            <!-- pointcut定义到com.dennisit.dao下的所有类中的所有方法 -->
            <aop:pointcut id="allMethod" expression="execution(* com.dennist.service.*.*(..))"/>
            <!-- 可以理解成Aspect,它由advice和pointcut组成 -->
            <aop:advisor advice-ref="txAdvice" pointcut-ref="allMethod"/>
        </aop:config>
    </beans>

     

    转载请注明出处:[http://www.cnblogs.com/dennisit/archive/2013/02/19/2917156.html]

    在线交谈

  • 相关阅读:
    Leetcode 349. Intersection of Two Arrays
    hdu 1016 Prime Ring Problem
    map 树木品种
    油田合并
    函数学习
    Leetcode 103. Binary Tree Zigzag Level Order Traversal
    Leetcode 102. Binary Tree Level Order Traversal
    Leetcode 101. Symmetric Tree
    poj 2524 Ubiquitous Religions(宗教信仰)
    pat 1009. 说反话 (20)
  • 原文地址:https://www.cnblogs.com/dennisit/p/2917156.html
Copyright © 2011-2022 走看看