spring 事务笔记(四)
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 事务笔记(四)相关推荐
- Spring事务--笔记
事务是逻辑上的一组操作,要么都执行,要么不执行. 事务能否生效数据库引擎是否支持事务的关键.比如常用的mysql数据默认的使用支持事务innodb引擎.但是,数据引擎变为mysiam,那么程序也就不再 ...
- spring学习笔记四(注入Bean属性)
注入Bean属性 初始化bean的时候我们可能要对生成的Bean对象进行一些初始属性的设置,那么在spring中是如何设置的呢? 我们以下面图中实例来为Bean注入属性 一.通过构造方法来注入属性 ...
- 【Spring学习笔记 四】Spring自动装配机制实践
我们一般学习某个知识,一定会现有个较为复杂的配置让你理解其中的关系,这个配置清晰规整,但是可能会需要大量的配置,这个时候就会有约定大于配置的理论实现了,通过我们约定好的一致的名称,我可以少写很多对应关 ...
- 《spring实战第四版》的读书笔记
<spring实战第四版>的读书笔记 1 概述 <Spring实战第四版>描述了Spring4架构的设计,看完了以后,最大感觉是Spring的IOC与aop理念实在是太强大了, ...
- 【Spring学习笔记 九】Spring声明式事务管理实现机制
什么是事务?事务就是把一系列的动作当成一个独立的工作单元,这些动作要么全部完成,要么全部不起作用,关乎数据准确性的地方我们一定要用到事务,防止业务逻辑出错. 什么是事务管理,事务管理对于企业应用而言至 ...
- Spring事务专题(四)Spring中事务的使用、抽象机制及模拟Spring事务实现
前言 本专题大纲如下: 事务专题大纲 「对于专题大纲我又做了调整哈,主要是希望专题的内容能够更丰富,更加详细」,本来是想在源码分析的文章中附带讲一讲事务使用中的问题,这两天想了想还是单独写一篇并作为事 ...
- Spring-学习笔记10【Spring事务控制】
Java后端 学习路线 笔记汇总表[黑马程序员] Spring-学习笔记01[Spring框架简介][day01] Spring-学习笔记02[程序间耦合] Spring-学习笔记03[Spring的 ...
- 事务例子_Spring事务专题(四)Spring中事务的使用、抽象机制及模拟Spring事务实现...
Spring中事务的使用示例.属性及使用中可能出现的问题 前言 本专题大纲如下: 「对于专题大纲我又做了调整哈,主要是希望专题的内容能够更丰富,更加详细」,本来是想在源码分析的文章中附带讲一讲事务使用 ...
- 一天十道Java面试题----第四天(线程池复用的原理------>spring事务的实现方式原理以及隔离级别)
这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 31.线程池复用的原理 32.spring是什么? 33.对Aop的理解 34.对IOC的理解 35.BeanFactor ...
最新文章
- 解决使用Navicat等工具进行连接登录mysql的1130错误,无法使用Ip远程连接的问题(mysql为8.0版本)
- solidity智能合约[7]-整型与运算
- 现在做Android开发有前途吗?复习指南
- 设计模式之代理:手动实现动态代理,揭秘原理实现
- 杨氏模量_快!准!狠!——5分钟搞定A-Level物理必考知识点杨氏模量曲线...
- linux 重新安装内核,升级操作系统内核(不重新安装UltraPath)
- navicat for mysql提示_Navicat for MySQL使用教程: MYSQL的提示操作和技巧
- 【Python3 爬虫】12_代理IP的使用
- Linux经常使用命令(十六) - whereis
- 在linux下使用IDE运行C语言
- 我们盘点了7家财税SaaS平台,深入解读财税SaaS AB面
- wap 横屏适配和竖屏适配的通用方案
- C语言入门:查找子串
- 数组根据条件筛选出满足条件的数据(数组里面是对象)
- 30个银行的logo
- 直接渲染管理器(Direct Rendering Manager, DRM)
- 思源笔记局域网内访问【使用教程】
- 第五届阿里天池中间件比赛经历分享
- 彻底解决python关于各种文件(音乐、视屏等)读写的操作
- java二嗨租车项目_Java入门第二季第六章项目实战(租车系统)
热门文章
- 酷我音乐盒里的MV怎么下载
- Sharepoint摸索之路
- C#多线程lock解决数据同步
- 腾讯旗下网站的很多URL都包含“cgi-bin”,是什么意思?他们后台用什么语言?...
- VS一直停留在“正在还原nuget程序包”
- 以下是关于ASP.NET中保存各种信息的对象的比较,理解这些对象的原理,对制作完善的程序来说是相当有必要的(摘至互联网,并非原创--xukunping)...
- Jquery的Split二次分割
- 遍历 HashSet 的方法
- cpu 内存占用比较高的解决方案
- Linux设置root默认密码