Spring之AOP事务操作

简介: Spring之AOP事务操作 事务操作常用的API PlatformTransactionManager(平台事务管理器) Spring进行事务操作时候,主要使用一个PlatformTransactionManager接口,它表示事务管理器,即真正管理事务的对象。

Spring之AOP事务操作

事务操作常用的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的声明事务管理方式

Spring进行声明式事务配置的方式有两种:

  • 基于xml配置文件方式

第一步,配置事务管理器


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


@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) {
//....
}
}

 原文地址https://blog.csdn.net/mmake1994/article/details/81807489

相关文章
|
1月前
|
监控 Java 开发者
Spring AOP动态代理
Spring AOP动态代理
43 1
|
1月前
|
监控 Java 数据处理
【Spring云原生】Spring Batch:海量数据高并发任务处理!数据处理纵享新丝滑!事务管理机制+并行处理+实例应用讲解
【Spring云原生】Spring Batch:海量数据高并发任务处理!数据处理纵享新丝滑!事务管理机制+并行处理+实例应用讲解
|
1月前
|
Java 数据库 Spring
Spring事务失效的场景详解
Spring事务失效的场景详解
33 0
|
1月前
|
Java Spring 容器
Spring的AOP失效场景详解
Spring的AOP失效场景详解
106 0
|
28天前
|
设计模式 Java Maven
Spring Aop 底层责任链思路实现-springaopdi-ceng-ze-ren-lian-si-lu-shi-xian
Spring Aop 底层责任链思路实现-springaopdi-ceng-ze-ren-lian-si-lu-shi-xian
34 1
|
2天前
|
监控 JavaScript Java
|
16天前
|
存储 关系型数据库 MySQL
【mybatis-plus】Springboot+AOP+自定义注解实现多数据源操作(数据源信息存在数据库)
【mybatis-plus】Springboot+AOP+自定义注解实现多数据源操作(数据源信息存在数据库)
|
22天前
|
XML Java Maven
Spring之Aop的注解使用
Spring之Aop的注解使用
|
27天前
|
Java Spring
Spring 如何实现 AOP
Spring 如何实现 AOP
17 0
|
1月前
|
Java 编译器 程序员
Spring AOP 和 AspectJ 的比较
Spring AOP 和 AspectJ 的比较
37 0

热门文章

最新文章