spring入门到放弃——spring事务管理
Spring事务提供了两种管理的的方式:编程式事务和声明式事务
简单回顾下事务:
事务:逻辑上的一组操作,组成操作的各个单元,要么全部成功,要么全部失败。
事务特性:
原子性:一个事务包含的各个操作单元不可分割
一致性:事务执行前后数据应当保持一致
隔离性:一个事务的执行不应当受到其他事务的干扰
持久性:事务执行完之后,数据就被持久化到磁盘上
Spring事务管理常用的API:
PlatformTransactionmanager:平台事务管理器
平台事务管理器:是一个接口,是spring用于管理事务的真正的对象
DataSourceTransactionManager:底层使用JDBC管理事务的时候的具体实现类
HibernateTransactionManager:底层使用Hibernate管理事务时候的具体实现类
TransactionDefinition:事务定义信息
事务定义:用于定义事务的相关的信息,隔离级别、超时信息、传播行为、是否只读
TransactionStatus:事物的状态
事务状态:用于记录事务管理过程中,事务的状态的对象。
事务管理API的关系:
spring进行事务管理的时候,首先平台事务管理器根据事务定义信息进行事务的管理,在事务管理过程中,就会产生各种状态,将这些状态及信息记录到事务状态的对象中。
Spring事务的传播行为
spring事务传播行为主要负责业务层之间互相调用的复杂问题。spring会提供7种事务的传播行为,大概可以分为三类:
假设有A/B两个方法,各自包含不同的事务操作。
保证多个操作在同一个事务中
PROPAGATION_REQUIRED (常用):默认值,B事务所在的方法调用A事务所在的方法,如果A中有事务,则使用A中的事务(包含B事务),如果A没有,创建一个新的事务,将操作包含进来
PROPAGATION_MANDATORY :如果A中有事务,使用A中的事务。如果A没有事务,抛出异常。
PROPAGATION_SUPPORTS :支持事务,如果A中有事务,使用A中的事务。如果A没有事务,不使用事务。
保证多个操作不在同一个事务中
PROPAGATION_REQUIRES_NEW (常用):B事务所在的方法调用A事务所在的方法,如果A中有事务,将A的事务挂起(暂停),创建新事务,只包含B自身操作。如果A中没有事务,创建一个新事务,包含B自身操作。
PROPAGATION_NEVER :如果A中有事务,报异常。
PROPAGATION_NOT_SUPPORTED :如果A中有事务,将A的事务挂起。不使用事务管理
嵌套式事务
PROPAGATION_NESTED (常用):嵌套事务,B事务所在的方法调用A事务所在的方法,如果A中有事务,按照A的事务执行,执行完成后,设置一个保存点,执行B中的操作,如果没有异常,执行通过,如果有异常,可以选择回滚到最初始位置(A执行前),也可以回滚到保存点。
Spring的事务管理
声明式事务管理:
xml方式声明事务管理:
<!--配置service-->
<bean id="accountservice" class="com.demo1.tx.AccountServiceImp">
<property name="accountDao" ref="accountdao"/>
</bean>
<!--配置dao-->
<bean id="accountdao" class="com.demo1.dao.AccountDaoImp">
<property name="dataSource" ref="datasource"/>
</bean>
<!--1、配置数据库连接池,引入数据库配置文件-->
<context:property-placeholder location="classpath:com/demo1/jdbc.properties"/>
<bean id="datasource" class="www".120xh.cn"com.mchange.www.dfgj157.com v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driverClass}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"www.fengshen157.com//>
<property name="password" value="${jdbc.password}"/>
</bean>
<!--2、配置事务管理器-->
<bean id="transactionManager" class= "org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="datasource"/>
</bean>
<!--3、配置事务的增强:需要注入一个事务管理器属性-->
<tx:advice transaction-manager="transactionManager" id="txadvice">
<tx:attributes>
<!--事务管理的规则-->
<tx:method name="*" propagation="REQUIRED"/> <!--表示设置所有方法的传播行为为required-->
</tx:attributes>
</tx:advice>
<!--4、aop的配置-->
<aop:config>
<aop:pointcut id="pointcut1" expression="execution(* com.demo1.tx.AccountServiceImp.*(..))"/>
<!--配置切入点为AccountServiceImp类下面的所有方法-->
<!-- <aop:aspect/> 多个切入点和多个通知的组合-->
<!--一个切入点和一个通知的组合-->
<aop:advisor advice-ref="txadvice" pointcut-ref="pointcut1"/>
</aop:config>
注解方式声明事务管理:
配置事务管理器
<bean id="transactionManager" class= "org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="datasource"/> </bean>
开启事务注解
<tx:annotation-driven transaction-manager="transactionManager"/>
业务层方式上添加注解
spring入门到放弃——spring事务管理的更多相关文章
- Spring+JTA+Atomikos+mybatis分布式事务管理
我们平时的工作中用到的Spring事务管理是管理一个数据源的.但是如果对多个数据源进行事务管理该怎么办呢?我们可以用JTA和Atomikos结合Spring来实现一个分布式事务管理的功能.了解JTA可 ...
- spring boot配置mybatis和事务管理
spring boot配置mybatis和事务管理 一.spring boot与mybatis的配置 1.首先,spring boot 配置mybatis需要的全部依赖如下: <!-- Spri ...
- Spring 简单而强大的事务管理功能
开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本 ...
- java框架之Spring(3)-JDBC模板使用&事务管理
下面内容使用到的 jar 包下载 JDBC模板使用 入门 1.导包,如要导入 Spring 的基本开发包.数据库驱动包.Spring 提供的 JDBC 模板包,如下: 2.测试: @Test publ ...
- Spring 使用注解方式进行事务管理
转载:http://www.cnblogs.com/younggun/archive/2013/07/16/3193800.html 使用步骤: 步骤一.在spring配置文件中引入<tx:&g ...
- spring和mybatis整合进行事务管理
1.声明式实现事务管理 XML命名空间定义,定义用于事务支持的tx命名空间和AOP支持的aop命名空间: <beans xmlns="http://www.springframewor ...
- spring+mybatis之声明式事务管理初识(小实例)
前几篇的文章都只是初步学习spring和mybatis框架,所写的实例也都非常简单,所进行的数据访问控制也都很简单,没有加入事务管理.这篇文章将初步接触事务管理. 1.事务管理 理解事务管理之前,先通 ...
- 事务隔离级别与传播机制,spring+mybatis+atomikos实现分布式事务管理
1.事务的定义:事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功.其必须遵循四个原则(ACID). 原子性(Atomicity):即事务是不可分割的最小工作单 ...
- Spring事务隔离级别与传播机制详解,spring+mybatis+atomikos实现分布式事务管理
原创说明:本文为本人原创作品,绝非他处转载,转账请注明出处 1.事务的定义:事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功.其必须遵循四个原则(ACID). ...
随机推荐
- UVA 1608 Non-boring sequence 不无聊的序列(分治,中途相遇)
题意:给你一个长度为n序列,如果这个任意连续子序列的中都有至少出现一次的元素,那么就称这个序列是不无聊的,判断这个序列是不是无聊的. 先预处理出每个元素之前和之后相同元素出现的位置,就可以在O(1)的 ...
- MyBatis归纳
SqlSessionTemplate详解 SqlSessionTemplate类是MyBatis-Spring的核心.这个类负责管理MyBatis的SqlSession,调用MyBatis的SQL ...
- Problem Y: 哪一天,哪一秒?
Problem Y: 哪一天,哪一秒? Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 337 Solved: 196[Submit][Status][ ...
- JS实用技术
JS外部引用其他文件(建议) <script src="myScript1.js"></script> JS输出显示方式 使用 window.alert() ...
- Bootstrap历练实例:交替的进度条
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- NSString 使用 copy、strong
// 首先定义2个属性 @property (nonatomic, strong) NSString *stStr; @property (nonatomic, copy) NSString *coS ...
- UICollectionView实现无限轮播
#import "KGNewsController.h"#import "KGNewsCell.h"#import "KGNews.h"#i ...
- dev gridview columns代码管理
进入run designer界面.我们将在代码中设置columns的属性. 类: ViewTriAtt : DevExpress.XtraEditors.XtraUserControl 在类里面设置g ...
- (67)windows安装zabbix监控
在windows下安装zabbix agent,方法非常简单.首先到zabbix官方下载windows版本agent,地址:http://www.zabbix.com/download.php,找到“ ...
- 如何用纯 CSS 创作一根闪电连接线
效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/RBjdzZ 可交互视频 ...