spring 事务笔记(四)

文章目录

  • spring 事务笔记(四)
    • spring 事务原理简述
    • 声明式事务
      • 1. 注解方式
        • 配置事务管理器
        • 开启事务并使用
      • 2.xml配置方式
        • 配置事务管理器
        • 配置事务切入点

spring 事务原理简述

之前用spring事务都是直接用注解的方式,后来去试试用xml配置这种,其实这两种都是声明式的事务。spring的事务都是通过AOP实现的,说白了就是在用AOP前置通知加个对数据连接设置为非自动提交(默认自动提交),然后在用个AOP的返回通知做个自动提交,事务就这样实现了。

声明式事务

1. 注解方式

配置事务管理器

因为要用spring的事务,就需要在spring上下文中注册一个DataSourceTransactionManager,这个事务管理者主要做数据库事务。

@Configuration
public class DataSourceConfig {@Beanpublic DataSourceTransactionManager transactionManager() {return new DataSourceTransactionManager(dataSource());}@Beanpublic DataSource dataSource(){....return dataSource;    }
}
开启事务并使用

使用是十分简单的,之前我在自己的另一个博客中有写过:(1条消息) spring事务(三)_鸭梨的药丸哥的博客-CSDN博客,这里就直接拷过来了。

开启事务管理功能: @EnableTransactionManagement

事务注解: @Transactional

@Transactional的属性

  • name 属性指定选择哪个事务管理器。
  • propagation 事务的传播行为,默认值为 REQUIRED。
  • isolation 事务的隔离度,默认值采用 DEFAULT。
  • timeout 事务的超时时间,默认值为-1。
  • read-only 指定事务是否为只读事务,默认值为 false;
  • rollback-for 用于指定能够触发事务回滚的异常类型
  • no-rollback- for 抛出 no-rollback-for 指定的异常类型,不回滚事务。
    事务的隔离度

刚好对应数据库的几个隔离级别,默认是DEFAULT(数据库启用的隔离级别)

@Transactional(isolation = Isolation.READ_UNCOMMITTED):读取未提交数据@Transactional(isolation = Isolation.READ_COMMITTED):读取已提交数据@Transactional(isolation = Isolation.REPEATABLE_READ):可重复读@Transactional(isolation = Isolation.SERIALIZABLE):串行化

2.xml配置方式

配置事务管理器

一个数据源,一个transactionManager,没什么好说的。

<bean id="dataSource"class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost:3306/User?useSSL=true" /><property name="username" value="root" /><property name="password" value="root" />
</bean><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/>
</bean>
配置事务切入点

配一个切点和一个通知,因为这个是事务通知,所以我们引用的是spring事务提供的transactionManager,然后通过tx:attributes去定义要匹配的方法,对匹配的方法定义一些等级即可。

<!-- 开启aop注解支持 --><aop:aspectj-autoproxy/><aop:config><aop:pointcut id="Admincut" expression="execution(* com.wenyao.serviceImpl.AdminServiceImpl.*())"/><aop:advisor advice-ref="txAdvice" pointcut-ref="Admincut"></aop:advisor></aop:config><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><!-- 匹配查询的方法 --><tx:method name="get*" read-only="true"/><tx:method name="query*" read-only="true"/><tx:method name="find*" read-only="true"/><tx:method name="count*" read-only="true"/><!-- 匹配增删改方法 事务行为,事务的隔离度--><tx:method name="save*" propagation="REQUIRED" isolation="DEFAULT"/><tx:method name="add*" propagation="REQUIRED" isolation="DEFAULT"/></tx:attributes></tx:advice>
method name="add*" propagation="REQUIRED" isolation="DEFAULT"/></tx:attributes></tx:advice>

spring 事务笔记(四)相关推荐

  1. Spring事务--笔记

    事务是逻辑上的一组操作,要么都执行,要么不执行. 事务能否生效数据库引擎是否支持事务的关键.比如常用的mysql数据默认的使用支持事务innodb引擎.但是,数据引擎变为mysiam,那么程序也就不再 ...

  2. spring学习笔记四(注入Bean属性)

      注入Bean属性 初始化bean的时候我们可能要对生成的Bean对象进行一些初始属性的设置,那么在spring中是如何设置的呢? 我们以下面图中实例来为Bean注入属性 一.通过构造方法来注入属性 ...

  3. 【Spring学习笔记 四】Spring自动装配机制实践

    我们一般学习某个知识,一定会现有个较为复杂的配置让你理解其中的关系,这个配置清晰规整,但是可能会需要大量的配置,这个时候就会有约定大于配置的理论实现了,通过我们约定好的一致的名称,我可以少写很多对应关 ...

  4. 《spring实战第四版》的读书笔记

    <spring实战第四版>的读书笔记 1 概述 <Spring实战第四版>描述了Spring4架构的设计,看完了以后,最大感觉是Spring的IOC与aop理念实在是太强大了, ...

  5. 【Spring学习笔记 九】Spring声明式事务管理实现机制

    什么是事务?事务就是把一系列的动作当成一个独立的工作单元,这些动作要么全部完成,要么全部不起作用,关乎数据准确性的地方我们一定要用到事务,防止业务逻辑出错. 什么是事务管理,事务管理对于企业应用而言至 ...

  6. Spring事务专题(四)Spring中事务的使用、抽象机制及模拟Spring事务实现

    前言 本专题大纲如下: 事务专题大纲 「对于专题大纲我又做了调整哈,主要是希望专题的内容能够更丰富,更加详细」,本来是想在源码分析的文章中附带讲一讲事务使用中的问题,这两天想了想还是单独写一篇并作为事 ...

  7. Spring-学习笔记10【Spring事务控制】

    Java后端 学习路线 笔记汇总表[黑马程序员] Spring-学习笔记01[Spring框架简介][day01] Spring-学习笔记02[程序间耦合] Spring-学习笔记03[Spring的 ...

  8. 事务例子_Spring事务专题(四)Spring中事务的使用、抽象机制及模拟Spring事务实现...

    Spring中事务的使用示例.属性及使用中可能出现的问题 前言 本专题大纲如下: 「对于专题大纲我又做了调整哈,主要是希望专题的内容能够更丰富,更加详细」,本来是想在源码分析的文章中附带讲一讲事务使用 ...

  9. 一天十道Java面试题----第四天(线程池复用的原理------>spring事务的实现方式原理以及隔离级别)

    这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 31.线程池复用的原理 32.spring是什么? 33.对Aop的理解 34.对IOC的理解 35.BeanFactor ...

最新文章

  1. 解决使用Navicat等工具进行连接登录mysql的1130错误,无法使用Ip远程连接的问题(mysql为8.0版本)
  2. solidity智能合约[7]-整型与运算
  3. 现在做Android开发有前途吗?复习指南
  4. 设计模式之代理:手动实现动态代理,揭秘原理实现
  5. 杨氏模量_快!准!狠!——5分钟搞定A-Level物理必考知识点杨氏模量曲线...
  6. linux 重新安装内核,升级操作系统内核(不重新安装UltraPath)
  7. navicat for mysql提示_Navicat for MySQL使用教程: MYSQL的提示操作和技巧
  8. 【Python3 爬虫】12_代理IP的使用
  9. Linux经常使用命令(十六) - whereis
  10. 在linux下使用IDE运行C语言
  11. 我们盘点了7家财税SaaS平台,深入解读财税SaaS AB面
  12. wap 横屏适配和竖屏适配的通用方案
  13. C语言入门:查找子串
  14. 数组根据条件筛选出满足条件的数据(数组里面是对象)
  15. 30个银行的logo
  16. 直接渲染管理器(Direct Rendering Manager, DRM)
  17. 思源笔记局域网内访问【使用教程】
  18. 第五届阿里天池中间件比赛经历分享
  19. 彻底解决python关于各种文件(音乐、视屏等)读写的操作
  20. java二嗨租车项目_Java入门第二季第六章项目实战(租车系统)

热门文章

  1. 酷我音乐盒里的MV怎么下载
  2. Sharepoint摸索之路
  3. C#多线程lock解决数据同步
  4. 腾讯旗下网站的很多URL都包含“cgi-bin”,是什么意思?他们后台用什么语言?...
  5. VS一直停留在“正在还原nuget程序包”
  6. 以下是关于ASP.NET中保存各种信息的对象的比较,理解这些对象的原理,对制作完善的程序来说是相当有必要的(摘至互联网,并非原创--xukunping)...
  7. Jquery的Split二次分割
  8. 遍历 HashSet 的方法
  9. cpu 内存占用比较高的解决方案
  10. Linux设置root默认密码