Spring之AOP事务操作

目录

事务操作常用的API

PlatformTransactionManager(平台事务管理器)

TrancactionDefinition(事务定义信息)

隔离级别

传播行为

超时信息

是否只读

TrancactionStatus(事务的状态)

Spring的声明事务管理方式

配置事务核心管理器(准备工作)

声明事务配置方式

基于xml配置文件方式

基于注解方式


事务操作常用的API

  • PlatformTransactionManager(平台事务管理器)

Spring进行事务操作时候,主要使用一个PlatformTransactionManager接口,它表示事务管理器,即真正管理事务的对象。 

  • TrancactionDefinition(事务定义信息)

事务定义信息有:

隔离级别

传播行为

PROPAGION_XXX:事务的传播行为

  • 保证在同一个事务中 
    PROPAGION_REQUIRED:支持当前事务,如果不存在,就新建一个(默认
    PROPAGION_SUPPORTS:支持当前事务,如果不存在,就不使用事务 
    PROPAGION_MANDATORY:支持当前事务,如果不存在,就抛出异常

  • 保证没有在同一个事务中 
    PROPAGION_REQUIRES_NEW:如果有事务存在,挂起当前事务,创建一个新的事务 
    PROPAGION_NOT_SUPPORTED:以非事务方式运行,如果有事务存在,挂起当前事务 
    PROPAGION_NEVER:以非事务方式运行,如果有事务存在,抛出异常 
    PROPAGION_NESTED:如果当前事务存在,则嵌套事务执行

超时信息

是否只读

  • TrancactionStatus(事务的状态)

记录事务的状态,平台事务管理器根据事务定义的信息进行事务的管理,事务管理的过程中产生一些状态,将这些状态记录到TrancactionStatus里面。

Spring的声明事务管理方式

  • 配置事务核心管理器(准备工作)

第一步,配置事务管理器

<!-- 1.配置事务的管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <!-- 指定要对哪个数据库进行事务操作 -->
    <property name="dataSource" ref="dataSource"></property>
</bean>
  • 声明事务配置方式

基于xml配置文件方式

第一步,配置事务的增强,即指定对哪个事务管理器进行增强 

<!-- 2.配置事务的增强,指定对哪个事务管理器进行增强 -->
<tx:advice id="txadvice" transaction-manager="transactionManager">
    <tx:attributes>
        <!--
            表示来配置你要增强的方法的匹配的一个规则,
            注意:只须改方法的命名规则,其他都是固定的!
            propagation:事务的传播行为。
        -->
        <tx:method name="account*" propagation="REQUIRED"></tx:method>
        <!-- <tx:method name="insert*" propagation="REQUIRED"></tx:method> -->
    </tx:attributes>
</tx:advice>

第二步,配置切入点和切面

<!-- 3.配置切入点和切面(最重要的一步) -->
<aop:config>
    <!-- 切入点 -->
    <aop:pointcut expression="execution(* cn.itcast.tx.BookService.*(..))" id="pointcut1"/>
    <!-- 切面,即表示把哪个增强用在哪个切入点上 -->
    <aop:advisor advice-ref="txadvice" pointcut-ref="pointcut1"/>
</aop:config>

基于注解方式

第一步,配置事务管理器

<!-- 1.配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"></property>
</bean>

第二步,开启事务注解

<!-- 2.开启事务的注解 -->
<tx:annotation-driven/>

第三步,在具体使用事务的方法所在的类上面添加注解:@Transactional

@Transactional(isolation=Isolation.REPEATABLE_READ,propagation=Propagation.REQUIRED,readOnly=true)
public class AccountServiceImpl implements AccountService {

	private AccountDao ad ;
	private TransactionTemplate tt;
	
	@Transactional(isolation=Isolation.REPEATABLE_READ,propagation=Propagation.REQUIRED,readOnly=false)
	public void addMoney(Double money) {
    //....
    }

}

猜你喜欢

转载自blog.csdn.net/mmake1994/article/details/81807489