springboot使用 @Transactional 注解配置事务管理
介绍
springboot对数据库事务的使用非常的方便,只需要在方法上添加@Transactional注解即可。Spring 为事务管理提供了丰富的功能支持。Spring 事务管理分为编程式和声明式的两种方式。编程式事务指的是通过编码方式实现事务;声明式事务基于 AOP,将具体业务逻辑与事务处理解耦。声明式事务管理使业务代码逻辑不受污染, 因此在实际使用中声明式事务用的比较多。
使用Transactional注解
Transactional注解使用起来是非常简单的,只需要在相应的方法上面标识Transactional注解即可。
下面通过一个简单的例子演示Transaction注解的使用
@Transactional
@Override
public void addUser() {
User user1 = new User();
user1.setUsername("happyjava1");
user1.setPassword("123456");
userRepo.save(user1);
int i = 1 / 0;
User user2 = new User();
user2.setUsername("happyjava2");
user2.setPassword("123456");
userRepo.save(user2);
}
这里保存两个用户,然后通过 1/0 的方式使程序出现异常。通过一个测试方法测试:
@Test
public void testTx() {
userService.addUser();
}
如果数据库没有user1这条记录,说明事物是起作用了的。
执行结果是预期的报错了。
数据库也没有jappyjava1这个字段。说明Transactional注解起作用了。
Transactional注解通过noRollbackFor配置不回滚的异常
Transactional注解可以配置发生某个异常时不进行回滚。比如我在Transaction注解上添加如下属性,指定ArithmeticException不进行事务的回滚。
@Transactional(noRollbackFor = ArithmeticException.class)
再次运行测试方法。
依然报错了,但是查看数据库,user1这条记录已经插入数据库了。
通过propagation属性配置事务的传播行为
事务的传播行为,默认值为 Propagation.REQUIRED。可以手动指定其他的事务传播行为,如下:
- Propagation.REQUIRED
如果当前存在事务,则加入该事务,如果当前不存在事务,则创建一个新的事务。
- Propagation.SUPPORTS
如果当前存在事务,则加入该事务;如果当前不存在事务,则以非事务的方式继续运行。
- Propagation.MANDATORY
如果当前存在事务,则加入该事务;如果当前不存在事务,则抛出异常。
- Propagation.REQUIRES_NEW
重新创建一个新的事务,如果当前存在事务,暂停当前的事务。
- Propagation.NOT_SUPPORTED
以非事务的方式运行,如果当前存在事务,暂停当前的事务。
- Propagation.NEVER
以非事务的方式运行,如果当前存在事务,则抛出异常。
- Propagation.NESTED
如果没有,就新建一个事务;如果有,就在当前事务中嵌套其他事务。
通过isolation 属性配置事务的隔离级别
事务的隔离级别,默认值为 Isolation.DEFAULT,这个跟数据库的隔离级别有关系。可以自定义隔离级别,如下:
- Isolation.DEFAULT
- Isolation.READ_UNCOMMITTED
- Isolation.READ_COMMITTED
- Isolation.REPEATABLE_READ
- Isolation.SERIALIZABLE
事务的传播行为和隔离级别是比较抽象的东西,本文作为springboot的教程课程暂且不做探讨,等后续有时间会再写文章做探讨。
timeout 属性
事务的超时时间,默认值为-1。如果设置了该时间,超过该时间限制但事务还没有完成,则自动回滚事务。
总结
本文只是介绍了springboot可以通过Transactional注解,快速的配置事务管理。数据库事务,是一个很复杂的东西,如果要讲清楚,就不应该放在一篇springboot相关的文章中进行讲解,后续会再起篇幅,单独讲讲事务相关的东西。
springboot使用 @Transactional 注解配置事务管理的更多相关文章
- Spring Boot 中使用 @Transactional 注解配置事务管理
事务管理是应用系统开发中必不可少的一部分.Spring 为事务管理提供了丰富的功能支持.Spring 事务管理分为编程式和声明式的两种方式.编程式事务指的是通过编码方式实现事务:声明式事务基于 AOP ...
- Spring Boot中使用@Transactional注解配置事务管理
事务管理是应用系统开发中必不可少的一部分.Spring 为事务管理提供了丰富的功能支持.Spring 事务管理分为编程式和声明式的两种方式.编程式事务指的是通过编码方式实现事务:声明式事务基于 AOP ...
- 【快学springboot】9.使用 @Transactional 注解配置事务管理
介绍 springboot对数据库事务的使用非常的方便,只需要在方法上添加@Transactional注解即可.Spring 为事务管理提供了丰富的功能支持.Spring 事务管理分为编程式和声明式的 ...
- spring的annotation-driven配置事务管理器详解
http://blog.sina.com.cn/s/blog_8f61307b0100ynfb.html ——————————————————————————————————————————————— ...
- [转]@Transactional spring 配置事务 注意事项
@Transactional spring 配置事务 注意事项 [@more@] @Transactional spring 配置事务 注意事项 1. 在需要事务管理的地方加@Transactiona ...
- spring+mybatis之注解式事务管理初识(小实例)
1.上一章,我们谈到了spring+mybatis声明式事务管理,我们在文章末尾提到,在实际项目中,用得更多的是注解式事务管理,这一章将学习一下注解式事务管理的有关知识.注解式事务管理只需要在上一节的 ...
- spring 配置事务管理器
在Spring中数据库事务是通过PlatformTransactionManager进行管理的,jdbcTemplate是不能支持事务的,而能够支持事务的是org.springframework.tr ...
- spring 事务-使用@Transactional 注解(事务隔离级别)
转: spring 事务-使用@Transactional 注解(事务隔离级别) 2016年08月11日 21:49:20 华华鱼 阅读数 15490 标签: spring事务Transactiona ...
- SpringMVC配置 事务管理
1.确保持久层配置完毕 2.pom.xml里追加spring-tx 3.application-context.xml追加 <bean id="transactionManager&q ...
随机推荐
- python数据类型之二
列表 list #定义:[]内可以有多个任意类型的值,逗号分隔 基本语法 # 定义:[]内可以有多个任意类型的值,逗号分隔 # my_girl_friends=['alex','wupeiqi','y ...
- C++ 梳理:跑通简单程序
C++ 结合了三个编程流派: 过程式编程:C 特性,结构化语言,强调过程 面向对象编程:C++ 对于 C 语言的补充,一切皆对象,强调数据 泛型编程(generic programming):由 C+ ...
- VUE简单的语法
这篇主要记录了在使用过程的当中,对于vue的一些方法的理解 1.Vue生命周期中mounted和created的区别 created:在模板渲染成html前调用,即通常初始化某些属性值,然后再渲染成视 ...
- OpenCV 学习笔记(15)openc解帧视频
1 修改读取视频的地址 2 修改保存图片序列的路径 String videopath = "F:/dongdong/0tool/3D/2模型/相机阵列/1_12cam亿级相机/数据/giga ...
- 请写出jQuery绑定事件的方法,不少于两种
bind on live one 简写事件:click.hover.mousemove.mouseup.mousedown……
- ES6基础-ES6的扩展
进行对字符串扩展,正则扩展,数值扩展,函数扩展,对象扩展,数组扩展. 开发环境准备: 编辑器(VS Code, Atom,Sublime)或者IDE(Webstorm) 浏览器最新的Chrome 字符 ...
- [技术博客]使用wx.downloadfile将图片下载到本地临时存储
目录 目标 代码展示 重点讲解 目标 在上一篇技术博客中,我们生成的海报中包含图片,这些图片是存储到服务器上的,而canvas的drawimage函数只能读取本地文件,因此我们在drawCanvas之 ...
- ShowDoc 软件开发团队接口文档管理利器
ShowDoc是一个非常适合IT团队的在线API文档.技术文档工具.你可以使用Showdoc来编写在线API文档.技术文档.数据字典.在线手册. 这里介绍 Showdoc 这款开源(免费)文档管理系统 ...
- 【神经网络与深度学习】生成式对抗网络GAN研究进展(五)——Deep Convolutional Generative Adversarial Nerworks,DCGAN
[前言] 本文首先介绍生成式模型,然后着重梳理生成式模型(Generative Models)中生成对抗网络(Generative Adversarial Network)的研究与发展.作者 ...
- Vue基础项目模板
https://github.com/wanglong/vue-element-admin.git 优化 Vue CLI 3 构建的前端项目模板(1)- 基础项目模板介绍 一站式开源运维平台,分享给大 ...