1.事务的特性

  原子性:事务中的操作是不可分割的一部分

  一致性:要么同时成功,要么同时失败(事务执行前后数据保持一致)

  隔离性:并发互不干扰  

  持久性:事务一旦被提交,它就是一条持久性的数据

  

 2.Spring事务管理高层抽象3个接口

    PlatformTransactionManager--平台事务管理器

      -Spring为不同的持久化框架提供了不同的平台事务管理器接口实现

    TransactionDefinition--事务定义信息(隔离,传播,超时,只读)

      1>事务的隔离级别

        default--适用后端数据库默认的隔离级别

        READ_UNCOMMITED - READ_COMMITTED - REPEATABLE_READ - SERIALIZABLE(脏,幻(虚),不可重复读)

      2>事务的传播行为:解决业务层方法之间相互调用的问题

        PROPAGATION_REQUIRED - 支持当前事务,如果不存在就新建一个

        PROPAGATION_REQUIRES_NEW - 如果有事务存在,挂起当前事务,创建一个新的事物

        PROPAGATION_NESTED - 如果当前事务存在,则嵌套执行

    TransactionStatus--事务具体运行状态

      1>------------------------------------------------------

    流程 --

        根据事务定义的信息有平台事务管理器进行事务管理,进行管理产生相应的状态

 

3.Spring事务管理

  - 编程式的事务管理 -- 通过TransactionTemplate(事务模板)

  - 使用xml配置声明式事务

    --基于transactionProxyFactoryBean的事务管理

      ---配置事务管理器

      ---配置业务层代理

      ---配置目标对象

      ---注入事务管理器

      ---注入事务

      <!--

prop格式 PROPAGATION--事务的传播行为 ISOLATION--事务的隔离级别        READONLY--只读

-EXCEPTION--发生哪些行为事务回滚 +EXCEPTION--发生哪些错误事务不回滚

-->

<!-- 配置事务管理器 -->

<bean id="transactionManager"

class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<property name="dataSource" ref="dataSource"></property>

</bean>

<!-- 配置业务层代理 -->

<bean id="accountServiceProxy"

class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

<!-- 配置目标对象 -->

<property name="target" ref="accountService"></property>

<!-- 注入事务管理器 -->

<property name="transactionManager" ref="transactionManager"></property>

<!-- 注入事务属性 -->

<property name="transactionAttribute">

<props>



<prop key="tran*">PROPAGATION_REQUIRED</prop>

</props>

</property>

</bean>



--基于AspectJ的事务声明(重点)

    ---配置事务的增强

      ----事务定义信息

        -----propagation:事务的传播行为

        -----isolation:事务的隔离级别

        -----read-only:只读

        -----rollback-for:发生哪些异常时回滚

        -----no-rollback-for:发生哪些异常时不回滚

        -----timeout:过期信息

     ---配置切面

      ----配置切入点

      ----配置切面

      <!-- 配置事务的通知(事务的增强) -->

<tx:advice id="transactionAdvice" transaction-manager="transactionManager">

<!-- 事务定义信息 -->

<tx:attributes>

<tx:method name="tran*" propagation="REQUIRED" read-only="false" />

</tx:attributes>

</tx:advice>

<!-- 配置切面 -->

<aop:config>

<!-- 配置切入点 -->

<aop:pointcut expression="execution(* com.spring.service.impl.*.*(..))"

id="pointcut" />

<!-- 配置切面 -->

<aop:advisor advice-ref="transactionAdvice" pointcut-ref="pointcut" />

</aop:config>

  

  --基于注解的方式进行事务的声明(重点)

    ---开启事务注解

        <tx:annotation-driven transaction-manager="transactionManager"/>

    ---在要进行实务操作的类名上进行注解

@Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.DEFAULT)

源码 --

Spring声明式事务的配置方式的更多相关文章

  1. Spring声明式事务的配置~~~

    /*2011年8月28日 10:03:30 by Rush  */ 环境配置 项目使用SSH架构,现在要添加Spring事务管理功能,针对当前环境,只需要添加Spring 2.0 AOP类库即可.添加 ...

  2. Spring声明式事务的实现方式选择(JDK动态代理与cglib)

    1.简介 Spring声明式事务的具体实现方式是动态决定的,与具体配置.以及事务代理对象是否实现接口等有关. 2.使用JDK动态代理的情况 在满足下面两个条件时,Spring会选择JDK动态代理作为声 ...

  3. 五(一)、spring 声明式事务注解配置

    一.事务概述: 事务就是一系列的动作, 它们被当做一个单独的工作单元. 这些动作要么全部完成, 要么全部不起作用:比如 用户购买图书:购买动作之前需要确认 ①图书的数量是否足够:②用户账号余额是否足够 ...

  4. spring声明式事务以及配置

    使用spring提供的事务处理机制的好处是程序员可以不用关心事务的切面了,只要配置就好了,可以少写代码. spring声明式事务处理 spring 声明:针对的是程序员,程序员告诉spring容器,哪 ...

  5. 五(二)、spring 声明式事务xml配置

    概述: 接着上一节内容,把注解配置@@Transactional形式改为xml配置形式: 一.配置步骤 1.配置事务管理器 1 <!-- 1配置事务管理器 --> 2 <bean i ...

  6. XML方式实现Spring声明式事务管理

    1.首先编写一个实体类 public class Dept { private int deptId; private String deptName; public int getDeptId() ...

  7. JavaEE学习之Spring声明式事务

    一.引言 上一篇文章,学习了AOP相关知识,并做了一个简单的Hello world.本文在上篇文章的基础上,进一步学习下Spring的声明式事务. 二.相关概念 1. 事务(Transaction)— ...

  8. spring 声明式事务管理

    简单理解事务: 比如你去ATM机取5000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉5000元钱:然后ATM出5000元钱.这两个步骤必须是要么都执行要么都不执行.如果银行卡扣除了5000块但 ...

  9. Spring声明式事务(xml配置事务方式)

    Spring声明式事务(xml配置事务方式) >>>>>>>>>>>>>>>>>>>& ...

随机推荐

  1. python 下划线转驼峰

    # 下划线转驼峰 def str2Hump(text): arr = filter(None, text.lower().split('_')) res = '' j = 0 for i in arr ...

  2. Access-Control-Allow-Origin设置多个域名

    Access-Control-Allow-Origin只能返回一个. 所以用以下方法实现多个白名单域名:创建一个数据,获取请求中origin,如果在数组里,就返回该origin,如果不在,就返回一个默 ...

  3. 从零开始--Spring项目整合(1)使用maven框架搭建项目

    这些年一直在用spring的框架搭建项目,现在开始我们从零开始利用Spring框架来搭建项目,目前我能想到有Spring.SpringMVC.SpringJDBC.Mybatis.WebSockt.R ...

  4. 傻逼数学题(math)

    傻逼数学题 题目描述 由于乱码,复制不下来,只好截图了 输入格式 第一行一个正整数n 接下来n行每行两个整数x,y,表示第i个点的坐标 输出格式 一行一个数表示最小距离和,保留6位小数 样例输入 4 ...

  5. vue v-model 与 vuex state数据绑定问题

    最近开发的项目 需要用input 的v-model 直接绑定到vuex的store数据 因为v-model 能与data的数据绑定 尝试了半天 代码如下 <template> <di ...

  6. linux用户态定时器的使用---19【转】

    转自:http://www.cnblogs.com/zxouxuewei/p/5095288.html 原创博文,转载请标明出处--周学伟http://www.cnblogs.com/zxouxuew ...

  7. CentOS下yum安装

    centos最小化安装不会装yum,以下是安装方法:(所有操作均在ROOT用户下,系统版本是centos7) 一.删除原有YUM # rpm -aq|grep yum|xargs rpm -e --n ...

  8. AC日记——Count on a tree II spoj

    Count on a tree II 思路: 树上莫队: 先分块,然后,就好办了: 来,上代码: #include <cmath> #include <cstdio> #inc ...

  9. easyui常用

    清空列表选中项 //easyui datagrid 清空勾选 $('#List').datagrid('clearSelections'); 扩展修改查询方法 function QueryList() ...

  10. Guava源码学习(五)EventBus

    基于版本:Guava 22.0 Wiki:EventBus 0. EventBus简介 提供了发布-订阅模型,可以方便的在EventBus上注册订阅者,发布者可以简单的将事件传递给EventBus,E ...