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). ...
随机推荐
- uva297 Quadtrees (线段树思想,区间操作)
借鉴了线段数区间操作的思想,只是把一个结点的孩子扩展到了4个, 结点k,四个孩子编号分别为4*k+1,4*k+2,4*k+3,4*K+4,从零开始. 根据层数,确定权值. #include<cs ...
- cdoj 414 八数码 (双向bfs+康拓展开,A*)
一道关乎人生完整的问题. DBFS的优越:避免了结点膨胀太多. 假设一个状态结点可以扩展m个子结点,为了简单起见,假设每个结点的扩展都是相互独立的. 分析:起始状态结点数为1,每加深一层,结点数An ...
- [CV笔记]inRange对图像进行分割
先把图像转为hsv空间,然后对图像进行inrange取到hsv范围内的图像,我这里要做的是取到图中的几个白色区域以及里面的手写数字,方法可能不是最好的,因为刚入门cv没几天,先试着用所学取到这几个区域 ...
- TextView中使用Linkify添加超链接
首先,在TextView所属xml配置文件中,直接添加android:autoLink特性即可,它支持一个或多个(用分割线)自定义的值:none.web.email.phone或all. 另外, ...
- 在DataGridView控件中设置数据显示格式
实现效果: 知识运用: DataGridViewCellStyle类的Format属性 //获取或设置应用于DataGridView单元格的文本内容的格式字符串 public string Forma ...
- iOS监听电话来电、挂断、拨号等
以下,来讲解在app内如何调用打电话功能和监听电话来电.挂断.拨号等功能. 简单的UI布局: 首先,先实现拨打电话的功能,以便于后续测试: // 拨打电话 - (IBAction)dialingBut ...
- 【上下界网络流 二分】bzoj2406: 矩阵
感觉考试碰到上下界网络流也还是写不来啊 Description Input 第一行两个数n.m,表示矩阵的大小. 接下来n行,每行m列,描述矩阵A. 最后一行两个数L,R. Output 第一行,输出 ...
- linux下的一些命令分析与shell的一些命令
对> 与 >>的理解 echo "aaa" > aaa.txt 这个是在aaa.txt中写入aaa 可以用cat aaa.txt查看 echo &qu ...
- vscode 实时预览 编辑markdown 插件 Markdown Preview Enhanced
说明地址: https://shd101wyy.github.io/markdown-preview-enhanced/#/zh-cn/?id=markdown-preview-enhanced
- POJ:3160-Father Christmas flymouse
Father Christmas flymouse Time Limit: 1000MS Memory Limit: 131072K Description After retirement as c ...