spring中的aop事务

事务

1、事务的特性:(ACID)。
2、事务并发问题:(脏读、不可重复读、幻读)。
3、事务的隔离级别:(1:读未提交2:读已提交4:可重复读8:串行化)

spring事务

spring封装了事务的管理代码

事务操作:

1、打开事务
2、提交事务
3、回滚事务

事务操作对象:

因为在不同平台,操作事务的代码各不相同,spring提供了一个接口

PlatformTransactionManager接口(重要):

1、JDBC平台:DataSourceTransactionManager
2、Hibernate平台:HibernateTransactionManager

spring管理事务的属性介绍:

1、事务的隔离级别(1:读未提交2:读已提交4:可重复读8:串行化)
2、是否只读(true只读、false可操作)
3、事务的传播行为(决定业务方法之间调用,事务应该如何处理)
PROPAGION_XXX :事务的传播行为

  • 保证同一个事务中
    PROPAGATION_REQUIRED 支持当前事务,如果不存在 就新建一个(默认)
    PROPAGATION_SUPPORTS 支持当前事务,如果不存在,就不使用事务
    PROPAGATION_MANDATORY 支持当前事务,如果不存在,抛出异常

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

spring管理事务方式

方式一:编码式【了解】
方式二:xml配置(aop)【重要】
1、导包(aop、aspect、aop联盟、weaving织入包)
2、导入新的约束


域名空间.png

beans:最基本的
context:读取properties文件
aop:配置aop
tx:配置事务通知
3、配置通知

<!-- 配置事务通知 -->
<tx:advice transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="transfer" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false"/>
    </tx:attributes>
</tx:advice>
<!-- 配置织入 -->
<aop:config>
    <aop:pointcut expression="excution(* cn.lc.service.*ServiceImpl.*(..))" id="txPc"/>
    <!-- 配置切面 -->
    <aop:advisor advice-ref="txAdvice" pointcut-ref="txPc"/>
</aop:config>
//扩展
<tx:method name="save*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" />
        <tx:method name="persist*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" />
        <tx:method name="update*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" />
        <tx:method name="modify*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" />
        <tx:method name="delete*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" />
        <tx:method name="remove*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" />
        <tx:method name="get*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="true" />
        <tx:method name="find*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="true" />

方式三:注解配置(aop)【重要】
1、导包(aop、aspect、aop联盟、weaving织入包)
2、导入新的约束
3、开启注解管理事务

<!-- 开启使用注解管理aop事务 -->
<tx:annotation-driven/>

4、使用注解

//可以在类上加或者方法上
@Transactional(isolation=Isolation.REPEATABLE_READ,propagation=Propagation.REQUIRED,readOnly=false)
public void transfer(final Integer form,final Integer to,final Double money) {}
        
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、事务 什么是事务:事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败 事务特性:原子...
    空山Echo阅读 1,413评论 0 0
  • 【目录】1 Spring的事务管理机制2 Spring事务管理两种方式 1 Spring的事务管理机制 Sprin...
    花无缺_0159阅读 901评论 0 1
  • aop配置和事务的配置 环境 jdk1.7 tomcat7.0 spring3.1.1 hibernate4.1....
    playman阅读 1,362评论 0 2
  • Spring 复习 [toc] spring介绍 三层架构中spring位置,连接三层。 spring一站式框架正...
    inke阅读 794评论 0 11
  • Spring 事务属性分析 事务管理对于企业应用而言至关重要。它保证了用户的每一次操作都是可靠的,即便出现了异常的...
    壹点零阅读 1,336评论 0 2