什么是事物?

  事物是指逻辑上的一组操作,这组操作要么全部成功,要么全部失败。

事物的特性:

  原子性、一致性、隔离性、持久性

Spring事务管理的高级接口:

  PlatformTransactionManage:(根基不同的持久层框架使用不同的具体实现)

  TransactionDefinition:(隔离级别(ISOLATION)、传播行为(PROPAGATION)、超时时间(TIMEOUT)、只读)

  TransactionStatus:  (记录事物的状态)

Sring实现事务管理的方式:

  编程式事务管理:实际应用中很少使用,通过TransactionTemplate手动实现

 1.<!-- 配置事务管理器 -->
  <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <!-- 注入数据库连接池 -->
    <property name="dataSource" ref="dataSource"/>
  </bean>

 2.<!-- 编程式事务管理 -->
  <!-- 配置事物管理的模板:spring为简化事物管理的代码而提供的类 -->
  <bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
    <property name="transactionManager" ref="transactionManager"></property>
  </bean>

  3.//在需要事物管理的类中调用transactionTemplate.execute方法

    public void transferByTransactionTemplate(String out, String in, Double money) {
      transactionTemplate.execute(new TransactionCallbackWithoutResult() {

        @Override
        protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) {
          accountDao.inMoney(in, money);
          accountDao.outMoney(out, money);
        }
      });
    }

    使用XML声明式事务管理:开发中推荐使用(代码侵入性小),通过Spring的AOP实现

      a.ProxyFactoryBean + XML :早期spring2.0的方式

          <!-- 通过ProxyFactoryBean + XML方式实现事物管理 -->

        <!-- 配置业务层的代理 -->
                    <bean id="accountServiceProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
          <!-- 配置目标对象 -->
          <property name="target" ref="accountService" />
          <!-- 注入事物管理类 -->
          <property name="transactionManager" ref="transactionManager" />
          <!-- 注入事物的相关属性 -->
          <property name="transactionAttributes">
            <props>
              <!--
                prop的格式:
                  *PROPAGATION :事物的传播行为
                  *ISOLATION :事物的隔离级别
                  *readOnly :只读
                  *-Exception :需要回滚的异常
                  *+Exception :不需回滚的异常
              -->
              <prop key="transferByAOP">PROPAGATION_REQUIRED</prop>
            </props>
          </property>
        </bean>

      b.tx:advice + aop方式: 一次配置永久生效

       <!-- 通过AOP方式实现声明式事务管理 -->

      <!-- 配置事物的通知:(事物增强) -->
      <tx:advice id="txAdcive" transaction-manager="transactionManager">
        <tx:attributes>

          <!--
            <tx:method 相关属性
              *propagation :事物传播行为
              *isolation :事务隔离级别
              *read-only :只读
              *rollback-for :需要回滚的异常
              *no-rollback-for :不需回滚的异常
              *timeout :超时时间
          -->

          <tx:method name="transferByAOP" propagation="REQUIRED"/>
        </tx:attributes>
      </tx:advice>
      <!-- 配置切面 -->
      <aop:config>
        <!-- 配置切入点 -->
        <aop:pointcut id="pointcut" expression="execution(* com.cgj.spring.transaction.service.impl.AccountServiceImpl.transferByAOP(..))"/>
        <!-- 配置切面 -->
        <aop:advisor advice-ref="txAdcive" pointcut-ref="pointcut"/>
      </aop:config>

      c.@Transactional注解的方式:(推荐)注解控制

      a.<!-- 配置基于注解的声明式事物 -->

      <!-- 默认使用注解来管理事物行为 -->

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

     b.在需要事物管理的类或者方法上加(相关属性在注解的属性中配置,不配置使用默认值)    @Transactional  

声明式事务管理 事物的传播行为:

                        未完待续

Spring中的事务管理(学习笔记)的更多相关文章

  1. Spring中的事务管理详解

    在这里主要介绍Spring对事务管理的一些理论知识,实战方面参考上一篇博文: http://www.cnblogs.com/longshiyVip/p/5061547.html 1. 事务简介: 事务 ...

  2. Spring中的事务管理

    事务简介: 事务管理是企业级应用程序开发中必不可少的技术,用来确保数据的完整性和一致性 事务就是一系列的动作,它们被当作一个单独的工作单元.这些动作要么全部完成,要么全部不起作用 事务的四个关键属性( ...

  3. Spring框架学习笔记(10)——Spring中的事务管理

    什么是事务 举例:A给B转500,两个动作,A的账户少500,B的账户多500 事务就是一系列的动作, 它们被当做一个单独的工作单元. 这些动作要么全部完成, 要么全部不起作用 一.注解添加事务管理方 ...

  4. Spring JdbcTemplate 与 事务管理 学习

    Spring的JDBC框架能够承担资源管理和异常处理的工作,从而简化我们的JDBC代码, 让我们只需编写从数据库读写数据所必需的代码.Spring把数据访问的样板代码隐藏到模板类之下, 结合Sprin ...

  5. Spring_AOP基于AspectJ的注解开发&JDBC的模板使用&事务管理(学习笔记3)

    一:AOP基于AspectJ的注解开发 1,简单的实例: 1)引入相应的jar包 ​ 2)在配置文件里引入相关约束 <beans xmlns="http://www.springfra ...

  6. Oracle并发控制、事务管理学习笔记

    (a)基本概念 锁的2种最基本.最简单的类型:排他锁(eXclusive lock,即X锁).共享锁(Share lock,即S锁). 不同级别的锁定协议及其作用: 申请的锁 及其作用 锁定协议 修改 ...

  7. Spring中AOP切面编程学习笔记

    注解方式实现aop我们主要分为如下几个步骤: 1.在切面类(为切点服务的类)前用@Aspect注释修饰,声明为一个切面类. 2.用@Pointcut注释声明一个切点,目的是为了告诉切面,谁是它的服务对 ...

  8. Spring中的AOP(学习笔记)

    是什么AOP及实现方式 AOP的基本概念 Schema-base AOP Spring AOP API AspectJ

  9. Spring入门6事务管理2 基于Annotation方式的声明式事务管理机制

    Spring入门6事务管理2 基于Annotation方式的声明式事务管理机制 201311.27 代码下载 链接: http://pan.baidu.com/s/1kYc6c 密码: 233t 前言 ...

随机推荐

  1. oracle客户端安装与配置

    在进行开发时经常需要连接Oracle数据库,一般的场景是Oracle数据库在远程服务器上,本地计算机通过plsql developer来访问. 这就要求在本地安装好plsql developer,但是 ...

  2. 【Kubernetes】离线业务:Job与CronJob

    Deployment.StatefulSet和DaemonSet这三个编排概念编排的对象主要都是在线业务(Long Running Task,这些应用一旦运行起来,除非出错或者停止,它的容器进程会一直 ...

  3. 九度oj 题目1139:最大子矩阵

    题目描述: 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵. 比如,如下4 * 4的矩阵 0 -2 -7 0 9 2 -6 2 -4 1 ...

  4. 九度oj 题目1026:又一版 A+B

    题目描述: 输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < m <10)进制数. 输入: 输入格式:测试输入包含若干测试用例.每个测试用例 ...

  5. shit layui & bugs

    shit layui & bugs use is not useful at all! http://www.layui.com/demo/form.html layui.use([" ...

  6. 【Luogu】P1586四方定理(DP)

    题目链接 此题使用DP.设f[i][j]表示数i用j个数表示,则对于所有的k<=sqrt(i),有 f[i][j]=∑f[i-k*k][j-1] 但是这样会有重复情况.所以先枚举k,再枚举i和j ...

  7. PAT天梯赛练习题——L3-005. 垃圾箱分布(暴力SPFA)

    L3-005. 垃圾箱分布 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 大家倒垃圾的时候,都希望垃圾箱距离自己比较近,但是谁 ...

  8. BZOJ 3527 [Zjoi2014]力 ——FFT

    [题目分析] FFT,构造数列进行卷积,挺裸的一道题目诶. 还是写起来并不顺手,再练. [代码] #include <cmath> #include <cstdio> #inc ...

  9. K-lord #3 (组合数学)

    题目描述 如图,设一个圆分成 n 个扇形 S1 ... ,Sn (扇形大小不一样),现用 k 种不同的颜色对这 n 个扇形进行染色 ( n>=3 , k>=3 ); 每一个扇形染一种颜色, ...

  10. 浅谈java内存泄漏

    最近有朋友遇到个问题,tomcat在运行几天后就会报outofmemory,然后就死了,我就稍微总结了下内存泄漏的一些原因,纯属个人理解,欢迎大侠们劈砖: 一.字符串问题 这个也是一个常见的问题,我们 ...