Spring之AOP事务操作
事务操作常用的API
Spring进行事务操作时候,主要使用一个PlatformTransactionManager接口,它表示事务管理器,即真正管理事务的对象。
事务定义信息有:
隔离级别
传播行为
PROPAGION_XXX:事务的传播行为
-
保证在同一个事务中
PROPAGION_REQUIRED:支持当前事务,如果不存在,就新建一个(默认)
PROPAGION_SUPPORTS:支持当前事务,如果不存在,就不使用事务
PROPAGION_MANDATORY:支持当前事务,如果不存在,就抛出异常 -
保证没有在同一个事务中
PROPAGION_REQUIRES_NEW:如果有事务存在,挂起当前事务,创建一个新的事务
PROPAGION_NOT_SUPPORTED:以非事务方式运行,如果有事务存在,挂起当前事务
PROPAGION_NEVER:以非事务方式运行,如果有事务存在,抛出异常
PROPAGION_NESTED:如果当前事务存在,则嵌套事务执行
超时信息
是否只读
记录事务的状态,平台事务管理器根据事务定义的信息进行事务的管理,事务管理的过程中产生一些状态,将这些状态记录到TrancactionStatus里面。
Spring的声明事务管理方式
Spring进行声明式事务配置的方式有两种:
第一步,配置事务管理器
<!-- 1.配置事务的管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 指定要对哪个数据库进行事务操作 -->
<property name="dataSource" ref="dataSource"></property>
</bean>
第二步,配置事务的增强,即指定对哪个事务管理器进行增强
<!-- 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
true)
(isolation=Isolation.REPEATABLE_READ,propagation=Propagation.REQUIRED,readOnly=
public class AccountServiceImpl implements AccountService {
private AccountDao ad ;
private TransactionTemplate tt;
false)
(isolation=Isolation.REPEATABLE_READ,propagation=Propagation.REQUIRED,readOnly=
public void addMoney(Double money) {
//....
}
}
原文地址https://blog.csdn.net/mmake1994/article/details/81807489