博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot + 事务回滚简单使用
阅读量:3936 次
发布时间:2019-05-23

本文共 3194 字,大约阅读时间需要 10 分钟。

1、事务使用

在代码中使用事务很简单,只需要在方法上添加好@Transactional注解即可

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Transactional;/** * 

* 服务实现类 *

* @author 小吾 * @since 2020-05-21 */@Servicepublic class UserServiceImpl extends ServiceImpl
implements UserService {
@Autowired private UserMapper userMapper; /** * 在方法上加上@Transactional注解,即可 */ @Transactional(rollbackFor = Exception.class) public String transactionNo1() {
User user = new User(); user.setName("小吾1号"); user.setSex(1); userMapper.insert(user); System.out.println("没有异常事务不会触发,生成数据"); return "新增成功,没有异常"; } @Transactional(rollbackFor = Exception.class) public String transactionNo2() {
User user = new User(); user.setName("小吾2号"); user.setSex(1); userMapper.insert(user); //这里我们给他出现一个异常使事务进行回滚 int x = 2 / 0; //如果我们这里想要抛出自己的异常,可以使用try{}catch (){}抛出自定义异常信息 System.out.println("这一段输出,就不会输出,直接执行事务回滚操作"); return "新增失败,异常捕获,事务回滚"; }}

2、@Transactional简单介绍+使用方式

  1. @Transactional注解使用在接口实现类或者接口实现方法上,不能实现在接口类中
  2. @Transactional注解方法不能被其他方法间接调用,否则事务会失效
/** 我们通过非事务方法调用事务方法,这时会导致事务失效 */    public String transactionNo3() {
return transactionalNo3(); } /** 这里触发异常,小吾3号会直接新增,不会进行回滚 */ @Transactional(rollbackFor = Exception.class) public String transactionalNo3(){
User user = new User(); user.setName("小吾3号"); user.setSex(1); userMapper.insert(user); int x = 2 / 0; return "新增失败,异常捕获,事务回滚"; }
  1. @Transactional注解只能使用在public方法上面,否则事务会失效。例:作用在private方法
/**     * 我们在控制层方法上使用private这时我们会发现事务失效,数据新增成功     */    @GetMapping("/transactionNo4")    @Transactional(rollbackFor = Exception.class)    private String transactionNo4(){
System.out.println("测试事务是否回滚成功,方法4-非public方法使用事务"); User user = new User(); user.setName("小吾4号"); user.setSex(1); userMapper.insert(user); //备注,我在控制层使用mapper接口是相当不符合代码规范的,这里只用于测试,勿怪 int x = 2 / 0; return "方法4"; }
  1. @Transactional注解对方法内线程方法无法作用到,线程出现异常也无法导致事务回滚
@Transactional(rollbackFor = Exception.class)    public String transactionNo5() {
User user = new User(); user.setName("小吾5号"); user.setSex(1); userMapper.insert(user); Timer timer = new Timer(); timer.schedule( new TimerTask() {
@Override public void run() {
System.out.println("hello"); //线程内部出现异常,并不会导致事务回滚 int x = 2/0; } },2000,4000 ); //同时线程外部异常也不会导致线程停止,但会使事务回滚 int x = 2 / 0; return "事务与线程"; }

@Transactional注解 rollbackFor默认是捕获(RuntimeException)运行时异常类以及其子类的,当方法抛出(checked exception)编译时异常是不会进行捕获的,例如:IOException;需要捕获这类异常我们就要修改rollbackFor的作用范围。

Transactional.png
关于事务的介绍还有很多的不足,这里我们只做了一些简单的使用和介绍,后期会不定期更新。
至此SpringBoot事务回滚简单使用就写完了,如有不懂可以加SpringBoot技术交流群14群号:719099151我是小吾,有问题可以直接在群里@我

转载地址:http://mfhgn.baihongyu.com/

你可能感兴趣的文章
Java中的左移时的负数问题
查看>>
从数组形式创建一棵树(用于leetcode测试)
查看>>
线程进阶:多任务处理(17)——Java中的锁(Unsafe基础)
查看>>
Spring/Boot/Cloud系列知识(1)——开篇
查看>>
线程基础:多任务处理(15)——Fork/Join框架(要点2)
查看>>
线程基础:多任务处理(16)——Fork/Join框架(排序算法性能补充)
查看>>
线程基础:多任务处理(14)——Fork/Join框架(要点1)
查看>>
架构设计:系统存储(13)——MySQL横向拆分与业务透明化(1)
查看>>
架构设计:系统存储(14)——MySQL横向拆分与业务透明化(2)
查看>>
架构设计:系统存储(5)——MySQL数据库性能优化(1)
查看>>
架构设计:系统存储(2)——块存储方案(2)
查看>>
架构设计:系统间通信(45)——阶段性问题记录
查看>>
架构设计:系统间通信(44)——自己动手设计ESB(5)
查看>>
架构设计:系统存储(1)——块存储方案(1)
查看>>
架构设计:系统间通信(42)——自己动手设计ESB(3)
查看>>
在工作时走神的闪光
查看>>
Ajax使用注意事项
查看>>
使用FileChannel下载本地文件及扩展
查看>>
linux文件权限与目录配置问题与解答(整理篇)
查看>>
linux文件与目录管理问题与回答(整理篇)
查看>>