四、Spring的事务管理

事务原本是数据库中的概念, 在Dao层。 但一般情况下, 需要将事务提升到

业务层, 即Service层。 这样做是为了 能够使用事务的特性来管理具体的业务。

1. Spring事务管理API介绍

(1) 事务管理器是PlatformTransactionManager接口 对象。 其主要

用于完成事务的提交、 回滚, 及获取事务的状态信息。

PlatformTransactionManager接口 常用的两个实现类

DataSourceTransactionManager: 使用JDBC或MyBatis 进行持久化数据时使用。

HibernateTransactionManager: 使用Hibernate进行持久化数据时使用。

(2) Spring的回滚方式

Spring事务的默认回滚方式是: 发生运行时异常时回滚, 发生受查异常时提交。

(3) 事务定义接口 事务定义接口 TransactionDefinition中定义了 事务描述

相关的三类常量: 事务隔离级别、 事务传播行为、 事务默认超时时限, 及对它们的

操作。

所谓事务传播行为是指, 处于不同事务中的方法在相互调用时, 执行期间事

务的维护情况。 如, A事务中的方法doSome() 调用B事务中的方法doOther() , 在调

用执行期间事务的维护情况, 就称为事务传播行为。

REQUIRED: 指定的方法必须在事务内 执行。 若当前存在事务, 就加入到当前

事务中; 若当前没有事务, 则创建一个新事务。 这种传播行为是最常见的选择

2. 环境搭建(导入jar包、 添加约束)

除之前的包,还要导入spring-jdbc-4.1.6.RELEASE,spring-tx-4.1.6.RELEASE,mysql-connector-java-5.1.30,com.springsource.com.mchange.v2.c3p0-0.9.1.2

3. 使用AspectJ的AOP配置管理事务( 重点)

分为三步:

注册事务管理器

配置事务注解驱动

以下是xml文件代码:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="http://www.springframework.org/schema/beans

        http://www.springframework.org/schema/beans/spring-beans.xsd

        http://www.springframework.org/schema/aop

        http://www.springframework.org/schema/aop/spring-aop.xsd

        http://www.springframework.org/schema/tx

        http://www.springframework.org/schema/tx/spring-tx.xsd

        http://www.springframework.org/schema/context

        http://www.springframework.org/schema/context/spring-context.xsd">

<!-- 加载jdbc属性文件 -->

<context:property-placeholder location="jdbc.properties"/>

<!-- 注册c3p0数据源 -->

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">

<property name="driverClass" value="${jdbc.driver}"/>

<property name="jdbcUrl" value="${jdbc.url}"/>

<property name="user" value="${jdbc.username}"/>

<property name="password" value="${jdbc.password}"/>

</bean>

<!-- 注册accountDao -->

<bean id="accountDaoImpl" class="com.mypack.dao.impl.AccountDaoImpl">

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

</bean>

<!-- 注册fundDao -->

<bean id="fundDaoImpl" class="com.mypack.dao.impl.FundDaoImpl">

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

</bean>

<!-- 注册service -->

<bean id="fundServiceImpl" class="com.mypack.service.impl.FundServiceImpl">

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

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

</bean>

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

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

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

</bean>

    <!-- 配置事务注解驱动 -->

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

</beans>

4. 使用事务注解管理事务

处理函数增加注释:

@Transactional(rollbackFor=FundException.class)

public void buyFund(String aname, double money, String fname, int amount) throws FundException {

accountDaoImpl.updateAccount(aname, money);

if (1==1) {

throw new FundException("购买基金出现异常!");

}

fundDaoImpl.updateFund(fname, amount);

}

3.1.4 Spring的事务管理的更多相关文章

  1. Spring的事务管理

    事务 事务:是逻辑上一组操作,要么全都成功,要么全都失败. 事务特性(ACID) 原子性:事务不可分割 一致性:事务执行的前后,数据完整性保持一致 隔离性:一个事务执行的时候,不应该受到其他事务的打扰 ...

  2. spring笔记--事务管理之声明式事务

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

  3. Spring应用——事务管理

    事务基础:请参看:http://www.cnblogs.com/solverpeng/p/5720306.html 一.Spring 事务管理 1.前提:事务管理器 在使用 Spring 声明式事务管 ...

  4. spring+mybatis事务管理

    spring+mybatis事务管理 最近在和朋友做一个项目,考虑用springmvc+mybatis来做,之前在公司工作吧,对于数据库这块的配置也有人再弄,最近因为这个项目,我就上网学习了一些关于数 ...

  5. spring,mybatis事务管理配置与@Transactional注解使用[转]

    spring,mybatis事务管理配置与@Transactional注解使用[转] spring,mybatis事务管理配置与@Transactional注解使用 概述事务管理对于企业应用来说是至关 ...

  6. Spring高级事务管理难点剖析

    1Spring事务传播行为 所谓事务传播行为就是多个事务方法相互调用时,事务如何在这些方法间传播.Spring支持7种事务传播行为 PROPAGATION_REQUIRED(加入已有事务) 如果当前没 ...

  7. CSDN上看到的一篇有关Spring JDBC事务管理的文章(内容比较全) (转)

    JDBC事务管理 Spring提供编程式的事务管理(Programmatic transaction manage- ment)与声明式的事务管理(Declarative transaction ma ...

  8. Spring之事务管理

        事务管理对于企业应用至关重要.它保证了用户的每一次操作都是可靠的,即便出现了异常的访问情况,也不至于破坏后台数据的完整性.     就像银行的自助取款机,通常都能正常为客户服务,但是也难免遇到 ...

  9. Mybatis整合Spring实现事务管理的源码分析

    一:前言 没有完整看完,但是看到了一些关键的地方,这里做个记录,过程会有点乱,以后逐渐补充最终归档为完整流程:相信看过框架源码的都知道过程中无法完全确定是怎样的流程,毕竟不可能全部都去测试一遍 ,但是 ...

  10. Hibernate与Spring的事务管理

    什么是事务 这个问题比较大,按照我的理解就是,一个事务内的n个操作,要么全部完成,一旦有一个操作有问题,那么所有的操作都全部回滚. Jdbc的事务 首先,大家已经知道了,事务说白了就是一个词----统 ...

随机推荐

  1. Windows Internals 笔记——字符和字符串处理

    1.自Windows NT起,Windows的所有版本都完全用Unicode来构建,调用Windows函数时,如果向它传入一个ANSI字符串,那么函数首先会把字符串转换为Unicode,再把结果传给操 ...

  2. SQL 安装MySQL

    假设学员的电脑是Windows系统,如Windows7,需要准备以下软件 Microsoft .NET Framework 4.5 Visual C++ Redistributable for Vis ...

  3. [转] Vue + Webpack 组件式开发(练习环境)

    前言 研究了下别人的 vue 多页面框架, 都是直接复制 package.json 文件,然后在本地 npm install 一下即可, 或者使用官网 vue-cli 工具生成一个项目, 觉得这样虽然 ...

  4. 转:mongoDB 修改 ulimit

    转自:http://blog.yucanlin.cn/2015/03/23/mongodb-%E4%BF%AE%E6%94%B9-ulimit/ mongoDB 修改 ulimit 一切都源于mong ...

  5. 在Qt中配置TBB以及简单实用

    最近本人在写离线光线追踪渲染器,但是Qt::QtConcurrent的功能有限,所以就尝试使用了一下,顺便分享一些经验. TBB里面的parallel_for非常适合光线追踪渲染器,而QtConcur ...

  6. 【安全性测试】一个简单地绕前端暴XSS漏洞

    在appscan暴出一个关于跨站点脚本编制的漏洞,但是appscan并不能完整地显示该漏洞.于是,工具是否出现误报,需要通过自己手工验证. 然后,我们需要找到目标参数的包并分析是从哪个步骤提交给服务器 ...

  7. ZAB协议与Paxos算法

    ZooKeeper并没有直接采用Paxos算法,而是采用一种被称为ZAB(ZooKeeper Atomic Broadcast)的一致性协议 ZooKeeper是一个典型的分布式数据一致性的解决方案, ...

  8. Jmeter学习系列----1 环境搭建

    注:在安装Jmeter之前,请先检查下电脑有没有装JDK:开始->运行->然后输入cmd->进入命令行界面,输入java -version , 出现以下信息就是此电脑已安装了JDK. ...

  9. JAVA 学习日记

    4. 数组 int[] in = new int[5];in[0] = 1;in[1] = 11;in[2] = 111;for(int i=0;i<in.length;i++){ System ...

  10. amazeui表单form异步提交方法

    // 留言提交 $(function() { var $form = $('#ue-form'); $form.validator({ validateOnSubmit: true, submit: ...