内容简介:springboot对数据库事务的使用非常的方便,只需要在方法上添加@Transactional注解即可。Spring 为事务管理提供了丰富的功能支持。Spring 事务管理分为编程式和声明式的两种方式。编程式事务指的是通过编码方式实现事务;声明式事务基于 AOP,将具体业务逻辑与事务处理解耦。声明式事务管理使业务代码逻辑不受污染, 因此在实际使用中声明式事务用的比较多。Transactional注解使用起来是非常简单的,只需要在相应的方法上面标识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相关的文章中进行讲解,后续会再起篇幅,单独讲讲事务相关的东西。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
PYTHON3:数据分析与机器学习实战
龙马高新教育 / 北京大学出版社 / 2018-9-1 / 69.00
机器学习(Machine Learning, ML)是一门多领域交叉学科,是人工智能的核心,其应用遍及人工智能的各个领域,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。在机器学习过程中,需要使用大量数据,而数据分析是指用适当的方法对收集的大量数据进行分析,提取有用信息并形成结论,进而对数据加以详细研究和概括总结的过程。本书结合机器学......一起来看看 《PYTHON3:数据分析与机器学习实战》 这本书的介绍吧!