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 boot配置mybatis和事务管理
spring boot配置mybatis和事务管理 一.spring boot与mybatis的配置 1.首先,spring boot 配置mybatis需要的全部依赖如下: <!-- Spri ...
- Spring ORM示例 - 带有AOP事务管理
Spring ORM示例 - 带有AOP事务管理 这是一个非常简单的Spring ORM示例,向您展示如何使用Spring配置应用程序 依赖注入(@Autowired annotation), JPA ...
- 解决在Spring整合Hibernate配置tx事务管理器出现错误的问题
解决在Spring整合Hibernate配置tx事务管理器出现错误的问题 参考文章: (1)解决在Spring整合Hibernate配置tx事务管理器出现错误的问题 (2)https://www.cn ...
- Spring Boot中的多事务管理
** 一.多数据源问题 ** 最后一个可以插入一条数据,原因是Transactoinal的事务只针对userMapper有效,因为之前的事务只给test1配置了,而test2并没有配置事务. ** 二 ...
- ❤️Spring从入门到大神--事务管理(搞笑漫画讲解!简单易懂!!)
事务管理 1.案例:转账 1.1.需求描述: 1.2.环境搭建 1.3.编写domain 1.4.编写dao 1.5.编写service 1.6.配置类 1.6.测试 2.事务概述 3.Spring事 ...
- Spring 使用注解方式进行事务管理
2019独角兽企业重金招聘Python工程师标准>>> 大家在使用spring的注解式事务管理时,对事务的传播行为和隔离级别可能有点不知所措,下边就详细的介绍下以备方便查阅. 事物注 ...
- spring和mybatis整合进行事务管理
1.声明式实现事务管理 XML命名空间定义,定义用于事务支持的tx命名空间和AOP支持的aop命名空间: <beans xmlns="http://www.springframewor ...
- Spring JDBC-混合框架的事务管理
概述 问题 解决方案 示例Hibernate Spring JDBC 概述 Spring 抽象的 DAO 体系兼容多种数据访问技术,它们各有特色,各有千秋. Hibernate 是非常优秀的 ORM ...
- SSM框架中使用Spring的@Transactional注解进行事务管理
一 介绍 在企业级应用中,保护数据的完整性是非常重要的一件事.因此不管应用的性能是多么的高.界面是多么的好看,如果在转账的过程中出现了意外导致用户的账号金额发生错误,那么这样的应用程序也是不可接受的 ...
最新文章
- 活在未来,需要知道了解过去
- 构建之法 第6~7章读后感和对Scrum的理解
- 本题中的变量(不包括变量ID)进行z-score标准化
- eureka集群只注册一个_Spring cloud系列教程第十篇- Spring cloud整合Eureka总结篇
- (24)打两拍verilog与VHDL编码(学无止境)
- ctf wav文件头损坏_【CTF入门第二篇】南邮CTF web题目总结
- windows10风格 springboot mybatis 项目框架源码 shiro 集成代码生成器
- 小程序UI库 iView Weapp
- PS如何修改扩展插件的名字(Photoshop重命名插件教程)
- html向上移动图片代码,图片随网页上下移动的代码实例
- R中输出常见位图和矢量图格式总结
- VB.net 研华IO卡1762的编程方法 控件方法 VS2010专业版
- V4 乱码问题总结 v5 也可以参考
- 用友U8 cloud释放新动能,加速城投行业数智化转型
- js使用cookie实现7天免登录
- 【2020年高被引学者】 孙剑 旷视科技
- linux sendmail漏洞,linux-sendmail的安全-029
- 删除插件mysearchresult(chrome和firebox)
- 【linux内核-源码编译之centos7】
- STM32单片机烧录失败汇总
热门文章
- Python reduce 函数 - Python零基础入门教程
- BugkuCTF-MISC题想蹭网先解开密码
- BugkuCTF-MISC题1和0的故事
- java比赛用多重for_关于 Java 中 for的多重循环
- html音频控件隐藏,html5 – Html 5音频标签自定义控件?
- zookeeper 默认端口_ZooKeeper知识点汇总
- 2017php行情,2017年蔬菜行情特点及未来蔬菜价格走势分析
- rrt算法流程图_RRT算法移动机器人路径规划(快速扩展随机树).pdf
- linux关闭自检测进程,CentOS下自动发邮件检测某进程是否存在
- PhP加载时显示动画,在ajax请求完之前的loading加载的动画效果实现