Spring——事物管理与传播特性

事物的特性(ACID)

1)原子性(Atomicity):事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。

2)一致性(Consistency):一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。在现实中的数据不应该被破坏。

3)隔离性(Isolation):可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏。

4)持久性(Durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响,这样就能从任何系统崩溃中恢复过来。通常情况下,事务的结果被写到持久化存储器中。

Spring管理实务

Annotation方法

applicationContext.xml

<!-- 提供事物管理 -->
    <bean id="txManager"
        class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref ="sessionFactory"/>
    </bean>
    <!-- Annotation方法 -->
    <tx:annotation-driven transaction-manager="txManager"/>

UserService.java

    @Transactional
    public void add(User user){
        userDao.save(user);
    }

xml方法

applicationContext.xml

<!-- 提供事物管理 -->
    <bean id="txManager"
        class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref ="sessionFactory"/>
    </bean>

    <!-- xml方法 -->
    <tx:advice id="txAdvice" transaction-manager="txManager">  
        <tx:attributes>  
            <tx:method name="add*" propagation="REQUIRED"/>  
            <tx:method name="getUsers*" propagation="REQUIRED"/>  
        </tx:attributes>  
    </tx:advice> 

    <aop:config>  
         <aop:pointcut id="serviceMethod" expression="execution(* com.ssh.service..*.*(..))"/>  
         <aop:advisor pointcut-ref="serviceMethod" advice-ref="txAdvice"/>  
    </aop:config>   

事物的传播特性

当事务方法被另一个事务方法调用时,必须指定事务应该如何传播。

事物的七种传播特性:
PROPAGATION_REQUIRED, 表示当前方法必须运行在事务中。如果当前事务存在,方法将会在该事务中运行。否则,会启动一个新的事务。

PROPAGATION_SUPPORTS ,支持当前事务,如果当前没有事务,就以非事务方式执行。

PROPAGATION_MANDATORY,表示该方法必须在事务中运行,如果当前事务不存在,则会抛出一个异常

PROPAGATION_REQUIRED_NEW,新建事务,如果当前存在事务,把当前事务挂起。

PROPAGATION_NOT_SUPPORTED ,表示该方法不应该运行在事务中。如果存在当前事务,在该方法运行期间,当前事务将被挂起。

PROPAGATION_NEVER, 表示当前方法不应该运行在事务上下文中。如果当前正有一个事务在运行,则会抛出异常

PROPAGATION_NESTED, 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与REQUIRED类似的操作。

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页