Spring中的事务管理(学习笔记)
什么是事物?
事物是指逻辑上的一组操作,这组操作要么全部成功,要么全部失败。
事物的特性:
原子性、一致性、隔离性、持久性
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中的事务管理(学习笔记)的更多相关文章
- Spring中的事务管理详解
在这里主要介绍Spring对事务管理的一些理论知识,实战方面参考上一篇博文: http://www.cnblogs.com/longshiyVip/p/5061547.html 1. 事务简介: 事务 ...
- Spring中的事务管理
事务简介: 事务管理是企业级应用程序开发中必不可少的技术,用来确保数据的完整性和一致性 事务就是一系列的动作,它们被当作一个单独的工作单元.这些动作要么全部完成,要么全部不起作用 事务的四个关键属性( ...
- Spring框架学习笔记(10)——Spring中的事务管理
什么是事务 举例:A给B转500,两个动作,A的账户少500,B的账户多500 事务就是一系列的动作, 它们被当做一个单独的工作单元. 这些动作要么全部完成, 要么全部不起作用 一.注解添加事务管理方 ...
- Spring JdbcTemplate 与 事务管理 学习
Spring的JDBC框架能够承担资源管理和异常处理的工作,从而简化我们的JDBC代码, 让我们只需编写从数据库读写数据所必需的代码.Spring把数据访问的样板代码隐藏到模板类之下, 结合Sprin ...
- Spring_AOP基于AspectJ的注解开发&JDBC的模板使用&事务管理(学习笔记3)
一:AOP基于AspectJ的注解开发 1,简单的实例: 1)引入相应的jar包 2)在配置文件里引入相关约束 <beans xmlns="http://www.springfra ...
- Oracle并发控制、事务管理学习笔记
(a)基本概念 锁的2种最基本.最简单的类型:排他锁(eXclusive lock,即X锁).共享锁(Share lock,即S锁). 不同级别的锁定协议及其作用: 申请的锁 及其作用 锁定协议 修改 ...
- Spring中AOP切面编程学习笔记
注解方式实现aop我们主要分为如下几个步骤: 1.在切面类(为切点服务的类)前用@Aspect注释修饰,声明为一个切面类. 2.用@Pointcut注释声明一个切点,目的是为了告诉切面,谁是它的服务对 ...
- Spring中的AOP(学习笔记)
是什么AOP及实现方式 AOP的基本概念 Schema-base AOP Spring AOP API AspectJ
- Spring入门6事务管理2 基于Annotation方式的声明式事务管理机制
Spring入门6事务管理2 基于Annotation方式的声明式事务管理机制 201311.27 代码下载 链接: http://pan.baidu.com/s/1kYc6c 密码: 233t 前言 ...
随机推荐
- Ignite集成Spark之IgniteDataFrames
下面简要地回顾一下在第一篇文章中所谈到的内容. Ignite是一个分布式的内存数据库.缓存和处理平台,为事务型.分析型和流式负载而设计,在保证扩展性的前提下提供了内存级的性能. Spark是一个流式数 ...
- hdfs api读写文写件个人练习
看下hdfs的读写原理,主要是打开FileSystem,获得InputStream or OutputStream: 那么主要用到的FileSystem类是一个实现了文件系统的抽象类,继承来自org. ...
- BZOJ1924 [Sdoi2010]所驼门王的宝藏 【建图 + tarjan】
题目 输入格式 第一行给出三个正整数 N, R, C. 以下 N 行,每行给出一扇传送门的信息,包含三个正整数xi, yi, Ti,表示该传送门设在位于第 xi行第yi列的藏宝宫室,类型为 Ti.Ti ...
- 刷题总结——小凸玩矩阵(scoi)
题目: 题目背景 SCOI2015 DAY1 T1 题目描述 小凸和小方是好朋友,小方给了小凸一个 n×m(n≤m)的矩阵 A,并且要求小凸从矩阵中选出 n 个数,其中任意两个数都不能在同一行或者同一 ...
- android源码mk文件里的TARGET_OUT指向哪里?
android源码核心变量大都在build/core/envsetup.mk中建立 在该文件中,可以找到 TARGET_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_ ...
- 【shell】shell编程(三)-if,select,case语句
通过前两篇文章,我们掌握了shell的一些基本写法和变量的使用,以及基本数据类型的运算.那么,本次就将要学习shell的结构化命令了,也就是我们其它编程语言中的条件选择语句及循环语句. 不过,在学习s ...
- 标准C程序设计七---14
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- CentOS yum update 与 yum upgrade 区别
yum -y update 升级所有包同时也升级软件和系统内核 yum -y upgrade 只升级所有包,不升级软件和系统内核 官方文档:https://access.redhat.com/docu ...
- codevs——1690 开关灯
1690 开关灯 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description YYX家门前的街上有N( ...
- ByteArrayInputStream的作用,和BufferedOutputStream 的区别
个人好奇ByteArrayInputStream,到底是有什么用于是百度了一些资料 整合了下,********这两个类对于要创建临时性文件的程序以及网络数据的传输.数据压缩后的传输等可以提高运行的的效 ...