当前位置: 首页 > news >正文

Java---后端事务管理

代码世界聚眸光,昼夜敲盘思绪长。
算法心间精构建,编程路上细思量。
屏前架构乾坤定,键上飞驰智慧扬。
默默耕耘成果现,创新科技铸辉煌。

目录

一,概念

二,Spring事务管理

三,rollbackFor事务回滚

四,propagation传播行为

一,概念

二,Spring事务管理

下面我们举一个小例子来演示一下

首先创建一个Service的接口:

public interface IYZService {/*** 处理用户信息* */User dealUser(String name);/*** 测试* */User testUser(String name);
}

然后实现Service接口:

@Component //将当前容器交给IOC容器管理 成为IOC容器中的bean
public class YZService implements IYZService {@Autowired  //运行时,IOC容器会提供该类型的bean对象,并赋值给该变量  这就是依赖注入private YZDao yzDao;@Overridepublic User dealUser(String name) {User user = yzDao.findUserByName(name);Address address = new Address();address.setCity("淄博");address.setProvince("山东");user.setAddress(address);return user;}@Overridepublic User testUser(String name) {User user = yzDao.findUserByName(name);Address address = new Address();address.setCity("淄博1");address.setProvince("山东1");user.setAddress(address);return user;}
}

Dao的接口和类:

public interface IYZDao {/** 根据用户姓名查找用户信息* **/User findUserByName(String name);
}
@Component //将当前容器交给IOC容器管理 成为IOC容器中的bean
public class YZDao implements IYZDao {@Overridepublic User findUserByName(String name) {User user = new User();user.setName(name);user.setAge(20);Address address = new Address();address.setProvince("北京");address.setCity("北京");user.setAddress(address);return user ;}
}

Controller层代码:

@RestController
public class RequestController {@Resource(name ="YZService")private IYZService yzService;@RequestMapping("/yzTestPath/{name}")public Result yzTestPath(@PathVariable String name){User user = yzService.dealUser(name);User user2 = yzService.testUser(name);List<User> list = new ArrayList<User>();list.add(user);list.add(user2);return  Result.success(list);}
}

测试:

下面我们先定义一个全局的异常处理器:GlobalExceptionHandler

/*** 全局异常管理器* */
@RestControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(Exception.class)public Result exception(Exception e) {e.printStackTrace();return Result.error("对不起,操作失败,请联系管理员");}
}

接下来我们模拟一个异常

@RestController
public class RequestController {@Resource(name ="YZService")private IYZService yzService;@RequestMapping("/yzTestPath/{name}")public Result yzTestPath(@PathVariable String name){User user = yzService.dealUser(name);//抛出异常int i =1/0;User user2 = yzService.testUser(name);List<User> list = new ArrayList<User>();list.add(user);list.add(user2);return  Result.success(list);}
}

 接着我们请求接口:

然后看控制台:

 

错误的堆栈信息也打印出来了。

接下来我们继续将事务管理,这里需要用到@Transactional这个注解:

 这个注解一般是作用在业务层的曾删改这一层上面的

三,rollbackFor事务回滚

 那么我们如果要指定在所有异常情况下都回滚呢?

@Component //将当前容器交给IOC容器管理 成为IOC容器中的bean
public class YZDao implements IYZDao {@Transactional(rollbackFor = Exception.class)@Overridepublic User findUserByName(String name) {User user = 数据库操作return user ;}
}

四,propagation传播行为

常见的传播行为 

@Component //将当前容器交给IOC容器管理 成为IOC容器中的bean
public class YZDao implements IYZDao {@Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)@Overridepublic User findUserByName(String name) {User user = new User();user.setName(name);user.setAge(20);Address address = new Address();address.setProvince("北京");address.setCity("北京");user.setAddress(address);test();return user ;}@Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRES_NEW)public void test(){}
}

http://www.lryc.cn/news/404540.html

相关文章:

  • Leetcode 3223. Minimum Length of String After Operations
  • oops使用笔记
  • redistemplate介绍与演示
  • 代谢组数据分析(十五):基于python语言构建PLS-DA算法构建分类模型
  • 任务3 git基础知识(主要是pr的笔记)
  • 三相PWM整流器滞环电流控制仿真matlab simulink
  • AVL树超详解上
  • spring boot 实现token验证登陆状态
  • 【.NET全栈】ASP.NET开发Web应用——用户控件和绘图
  • 一行Python代码实现数据清洗的18种方法
  • Java API练习 (1) (2024.7.20)
  • JavaScript之WebAPIs-BOM
  • Math Reference Notes: 数学思想和方法
  • Spring Cloud GateWay(4.1.4)
  • 基于PHP+MYSQL开发制作的趣味测试网站源码
  • 【微信小程序】wx.navigateTo传参时不能使用const定义的数据类型
  • 【Android studio环境搭建】Android studio连接夜神模拟器
  • Qt:26.Qt项目:贪吃蛇游戏
  • 通过HTML/CSS 实现各类进度条的功能。
  • Opencv学习项目3——人脸识别
  • 【js自学打卡11】生成器函数(generator函数)的使用总结+代码举例
  • 深入了解jdbc-02-CRUD
  • 《基于 Kafka + Quartz 实现时限质控方案》
  • 浏览器的卡顿与react的解决思路
  • XXE:XML外部实体引入
  • 3D培训大师创新培训体验,加速空调关键组件的高效精准安装
  • PyTorch 深度学习实践-循环神经网络(高级篇)
  • 这才是老板喜欢的电子信息类简历
  • MySQL学习之事务,锁机制
  • 开源知识付费小程序源码 内容付费系统php源码 含完整图文部署教程