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事务管理相关推荐

  1. spring boot配置mybatis和事务管理

    spring boot配置mybatis和事务管理 一.spring boot与mybatis的配置 1.首先,spring boot 配置mybatis需要的全部依赖如下: <!-- Spri ...

  2. Spring ORM示例 - 带有AOP事务管理

    Spring ORM示例 - 带有AOP事务管理 这是一个非常简单的Spring ORM示例,向您展示如何使用Spring配置应用程序 依赖注入(@Autowired annotation), JPA ...

  3. 解决在Spring整合Hibernate配置tx事务管理器出现错误的问题

    解决在Spring整合Hibernate配置tx事务管理器出现错误的问题 参考文章: (1)解决在Spring整合Hibernate配置tx事务管理器出现错误的问题 (2)https://www.cn ...

  4. Spring Boot中的多事务管理

    ** 一.多数据源问题 ** 最后一个可以插入一条数据,原因是Transactoinal的事务只针对userMapper有效,因为之前的事务只给test1配置了,而test2并没有配置事务. ** 二 ...

  5. ❤️‍Spring从入门到大神--事务管理(搞笑漫画讲解!简单易懂!!)

    事务管理 1.案例:转账 1.1.需求描述: 1.2.环境搭建 1.3.编写domain 1.4.编写dao 1.5.编写service 1.6.配置类 1.6.测试 2.事务概述 3.Spring事 ...

  6. Spring 使用注解方式进行事务管理

    2019独角兽企业重金招聘Python工程师标准>>> 大家在使用spring的注解式事务管理时,对事务的传播行为和隔离级别可能有点不知所措,下边就详细的介绍下以备方便查阅. 事物注 ...

  7. spring和mybatis整合进行事务管理

    1.声明式实现事务管理 XML命名空间定义,定义用于事务支持的tx命名空间和AOP支持的aop命名空间: <beans xmlns="http://www.springframewor ...

  8. Spring JDBC-混合框架的事务管理

    概述 问题 解决方案 示例Hibernate Spring JDBC 概述 Spring 抽象的 DAO 体系兼容多种数据访问技术,它们各有特色,各有千秋. Hibernate 是非常优秀的 ORM ...

  9. SSM框架中使用Spring的@Transactional注解进行事务管理

    一 介绍 在企业级应用中,保护数据的完整性是非常重要的一件事.因此不管应用的性能是多么的高.界面是多么的好看,如果在转账的过程中出现了意外导致用户的账号金额发生错误,那么这样的应用程序也是不可接受的 ...

最新文章

  1. 活在未来,需要知道了解过去
  2. 构建之法 第6~7章读后感和对Scrum的理解
  3. 本题中的变量(不包括变量ID)进行z-score标准化
  4. eureka集群只注册一个_Spring cloud系列教程第十篇- Spring cloud整合Eureka总结篇
  5. (24)打两拍verilog与VHDL编码(学无止境)
  6. ctf wav文件头损坏_【CTF入门第二篇】南邮CTF web题目总结
  7. windows10风格 springboot mybatis 项目框架源码 shiro 集成代码生成器
  8. 小程序UI库 iView Weapp
  9. PS如何修改扩展插件的名字(Photoshop重命名插件教程)
  10. html向上移动图片代码,图片随网页上下移动的代码实例
  11. R中输出常见位图和矢量图格式总结
  12. VB.net 研华IO卡1762的编程方法 控件方法 VS2010专业版
  13. V4 乱码问题总结 v5 也可以参考
  14. 用友U8 cloud释放新动能,加速城投行业数智化转型
  15. js使用cookie实现7天免登录
  16. 【2020年高被引学者】 孙剑 旷视科技
  17. linux sendmail漏洞,linux-sendmail的安全-029
  18. 删除插件mysearchresult(chrome和firebox)
  19. 【linux内核-源码编译之centos7】
  20. STM32单片机烧录失败汇总

热门文章

  1. Python reduce 函数 - Python零基础入门教程
  2. BugkuCTF-MISC题想蹭网先解开密码
  3. BugkuCTF-MISC题1和0的故事
  4. java比赛用多重for_关于 Java 中 for的多重循环
  5. html音频控件隐藏,html5 – Html 5音频标签自定义控件?
  6. zookeeper 默认端口_ZooKeeper知识点汇总
  7. 2017php行情,2017年蔬菜行情特点及未来蔬菜价格走势分析
  8. rrt算法流程图_RRT算法移动机器人路径规划(快速扩展随机树).pdf
  9. linux关闭自检测进程,CentOS下自动发邮件检测某进程是否存在
  10. PhP加载时显示动画,在ajax请求完之前的loading加载的动画效果实现