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"/>
业务层方式上添加注解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/537614.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高德百度地图如何获取附近小区酒店银行等?

概述 实现以下功能&#xff1a;根据当前定位&#xff0c;查找附近小区 实现步骤 高德&#xff0c;百度地图实现方式相同&#xff0c;步骤都是如下&#xff1a; 1.获取当前位置的经纬度 2.查询poitype编码。 &#xff08;小区&#xff0c;写字楼&#xff0c;银行&#xff0…

angular 字符串转换成数字_Python基础语法大全:字符串的处理与使用

本文来自牛鹭学院学员&#xff1a;邓瑞杰字母处理string.capitalize()返回元字符串&#xff0c;且将字符串第一个字母转为大写&#xff0c;其它字母小写string.title()返回元字符串&#xff0c;且将字符串第一个字母转为大写&#xff0c;其它字母小写string.swapcase()用于对字…

Java实现MD5编码32位

加入依赖包 <dependency><groupId>org.apache.directory.studio</groupId><artifactId>org.apache.commons.codec</artifactId><version>1.8</version></dependency> 实现代码 DigestUtils.md5Hex(字符串)

计算机二级考试python_全国计算机等级考试考试大纲(2018年版)

级别 大纲名称 一级 一级计算机基础及WPS Office应用考试大纲&#xff08;2018年版&#xff09;点击下载 一级计算机基础及MS Office应用考试大纲&#xff08;2018年版&#xff09;点击下载 一级计算机基础及Photoshop应用考试大纲&#xff08;2018年版&#xff09;点击下载 一…

人工智能的就业方向

关于AI在的就业方向主要有&#xff0c;科研机构(机器人研究所等)&#xff0c;软硬件开发人员&#xff0c;高校讲师等&#xff0c;在国内的话就业前景是比较好的&#xff0c;国内产业升级&#xff0c;IT行业的转型工业和机器人和智能机器人以及可穿戴设备的研发将来都是强烈的热…

1亿像素的真相

世界那么大&#xff0c;谢谢你来看我&#xff01;&#xff01;关注我你就是个网络、电脑、手机小达人 乔布斯曾说&#xff0c;“手机拍照上主打高像素&#xff0c;是手机厂商利用广大消费者对照片成像原理知识漏洞的表现。” 小米发布了一款有1亿像素的概念型手机&#xff0c…

python实现链表的删除_Python中 为我们提供了一些独特的解决方案的方法特性

实际上&#xff0c;在日常的工作中&#xff0c;我们很多需求&#xff0c;无论是常见的、还是不常见的&#xff0c;Python 都为我们提供了一些独特的解决方案&#xff0c;既不需要自己造轮子&#xff0c;也不需要引入新的依赖(引入新的依赖势必会增加项目的复杂度)。但是 Python…

打通C/4HANA和S/4HANA的一个原型开发:智能服务创新案例

2019独角兽企业重金招聘Python工程师标准>>> 今年6月SAP发布C/4HANA之后&#xff0c;有顾问朋友们在公众号后台留言&#xff0c;询问C/4HANA如何同SAP的数字化核心S/4HANA系统结合起来&#xff0c;从而打通企业的前后端业务&#xff0c;帮助企业实现数字化转型。 有…

爬虫的重要思想

1.理论上讲只要网页上面能够看到的数据都是可以爬取的&#xff0c;因为所有看到的网页上的数据都是服务器发送到我们电脑上面的&#xff0c;只是有的数据加密过&#xff0c;很难解密。 2.在网页上无法看到或者无法获取的数据&#xff0c;爬虫同样不可能拿到&#xff0c;比如一…

python web环境傻瓜搭建_python——web 环境搭建

1.安装引用第三方库 selenium pip install selenium 2.下载浏览器驱动&#xff08;驱动版本和浏览器版本要对应参考链接 http://npm.taobao.org/mirrors/chromedriver/&#xff09; 查看浏览器驱动对应关系&#xff0c;本次已最新驱动版本作为教材讲解 版本2.42 发布时间2018.9…

项目管理十大知识领域,为何不含

问&#xff1a;项目管理十大知识领域&#xff0c;为何不含以下几项&#xff1a;立项管理&#xff0c;合同管理&#xff0c;文档管理&#xff0c;变更管理&#xff1f; 答&#xff1a; 立项完了才有项目&#xff1b; 合同管理包含在采购管理&#xff1b; 变更管理在整体管理&am…

B站视频下载(VideoHelper)

继续上次的知乎爬虫&#xff0c; 这次开始了哔哩哔哩的爬虫实践&#xff1b; 首先介绍下如何下载吧&#xff1a; VideoHelper 里面有三种方式下载b站视频。 同样的流程&#xff0c; 还是先抓包&#xff0c;分析参数&#xff0c;寻找参数&#xff08;包括之前的请求包和页面源码…

在职场遇到一个总是说话带刺的同事怎么相处?

网友&#xff1a; 带刺的人如果总是扑空&#xff0c;或者总是戳进一团棉花&#xff0c;你说他&#xff0c;她还能坚持多久。职场重心是工作&#xff0c;是做事&#xff0c;不要为这些无聊的人事太费心&#xff0c;刺猬带着刺到处转&#xff0c;最后结果不会好的。 网友&#xf…

postgresql 怎么读_大数据采集和抽取怎么做?这篇文章终于说明白了!

本文来源于公众号【胖滚猪学编程】&#xff0c;转载请注明出处&#xff01; 关于数据中台的概念和架构&#xff0c;我们在大白话 六问数据中台和数据中台全景架构及模块解析&#xff01;一文入门中台架构师&#xff01;两篇文章中都说明白了。从这一篇文章开始分享中台落地实战…

ZooKeeper应用——解决分布式系统单点故障

1.单点故障问题什么是分布式系统中的单点故障&#xff1a;通常分布式系统采用主从模式&#xff0c;就是一个主控机连接多个处理节点。主节点负责分发任务&#xff0c;从节点负责处理任务&#xff0c;当我们的主节点发生故障时&#xff0c;那么整个系统就都瘫痪了&#xff0c;那…

老板思维:有支出必须有对应的收入

项目经理 要时刻关注“有支出必须有对应的收入”。 当手头的项目产生支出时&#xff0c;必须要问自己&#xff0c;从哪里收入来填补这个支出&#xff0c;如果没有可收入的&#xff0c;那就是公司亏钱了。如果一定要亏钱&#xff0c;那可否产生收入之外的效益。 甲方提了新需求…

生活之难:生活到底难在哪里

生活之难&#xff1a;生活到底难在哪里 一、总结 一句话总结&#xff1a;难在天性&#xff0c;难在竞争&#xff0c;难在积累&#xff0c;难在追求&#xff0c;难在自己 难在天性 人的天性就是好吃懒做好玩不动脑的&#xff0c;但是生存的压力&#xff08;食物&#xff0c;房子…

解决org.springframework.web.multipart.MaxUploadSizeExceededException报错问题

在springboot中接收到上传的文件时候&#xff0c;出现了这种错误 org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.Fil…

python中元祖 字典 列表的区别_Python中元祖,列表,字典的区别

原博文 2016-08-16 15:25 − Python中有3种內建的数据结构&#xff1a;列表、元祖和字典&#xff1a; 1.列表 list是处理一组有序项目的数据结构&#xff0c;即你可以在一个列表中存储一个序列的项目。 列表中的项目应该包括在方括号中&#xff0c;这样Python就知道你是指明一个…

react 16.6 懒加载 Lazy 尝鲜

react 16.6 发布了新的功能 lazy &#xff0c;和一个组件 Suspense 下面我们看一下他的用法 首先我们先创建两个组件 LazyTest.1 和 LazyTest.2&#xff0c;内容相同 import React, { Component } from reactexport default class LazyTest extends Component{render(){return …