Java---后端事务管理

news2024/9/19 10:34:22

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

目录

一,概念

二,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;

    @Override
    public User dealUser(String name) {
        User user = yzDao.findUserByName(name);
        Address address = new Address();
        address.setCity("淄博");
        address.setProvince("山东");
        user.setAddress(address);
        return user;
    }

    @Override
    public 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 {
    @Override
    public 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)
    @Override
    public 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)
    @Override
    public 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.coloradmin.cn/o/1942506.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入了解软件架构:组件、容器与模块架构图详解

引言 在软件工程中&#xff0c;架构图是描绘系统结构和组件之间关系的重要工具。其中&#xff0c;组件架构图、子系统依赖分析&#xff08;容器图&#xff09;和模块架构图是三种常用的架构表示方法&#xff0c;它们各有侧重&#xff0c;适用于不同层面的架构分析与设计。本文…

JMeter请求导出Excel

前言 今天记录一个使用JMeter模拟浏览器请求后端导出&#xff0c;并下载Excel到指定位置的过程 创建请求 同样先创建一个线程组&#xff0c;再创建一个请求&#xff0c;设置好请求路径&#xff0c;端口号等 查看结果树 右键--添加--监听器--查看结果树 这里可以查看&#…

C语言 | Leetcode C语言题解之第273题整数转换英文表示

题目&#xff1a; 题解&#xff1a; char* singles[] {"", "One ","Two ","Three ","Four ","Five ","Six ","Seven ","Eight ","Nine "}; char* teens[] {"Ten…

二十、Qt位置相关函数

目录 一、函数概述 二、函数实践 三、总结 一、函数概述 Qt 提供了很多关于获取窗体位置及显示区域大小的函数&#xff0c;如 x()、y()和 pos()、react()、size()、geometry()等&#xff0c;统称为“位置相关函数”或“位置函数”&#xff0c; 如下图所示是几种主要的位置函数…

MybatisPlusException: Error: Method queryTotal execution error of sql 的报错解决

项目场景&#xff1a; 相关背景&#xff1a; 开发环境 开发系统时 系统页面加载正常 &#xff0c;发布运行环境后运行一段时间&#xff0c;前端页面 突然出现 报错信息&#xff0c; 报错信息如下&#xff1a; MybatisPlusException: Error: Method queryTotal execution erro…

gitee的怎么上传项目

前提 1.先下载Git Bash (如果没有下载的宝子们下载连接如下: 链接: link ) 项目上传到Gitee步骤 1.在Gitee上建立远程仓库 2.填写相关信息 3.进入本地你想要上传的文件目录下&#xff0c;右键单击空白处&#xff0c;点击Git Bash Here 4.配置你的用户名和邮箱 git con…

【快速逆向二/无过程/有源码】掌上高考—2024高考志愿填报服务平台

逆向日期&#xff1a;2024.07.21 使用工具&#xff1a;Node.js 加密工具&#xff1a;Crypto-js标准库 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 AES解密处理&#xff08;直接解密即可&#xff09;&#xff08;crypto-js.js 标准算法&…

【JVM基础04】——组成-什么是虚拟机栈?

目录 1- 引言&#xff1a;虚拟机栈1-1 虚拟机栈是什么&#xff1f;(What)1-2 为什么用虚拟机栈&#xff1f;虚拟机栈的作用 (Why) 2- ⭐核心&#xff1a;栈的常见问题(How)2-1 方法内的局部变量是否线程安全&#xff1f;线程不安全的局部变量 2-2 什么情况会导致栈内存溢出&…

数据传输工具性能深度评测(阿里云、百度智能云)

阿里云、百度智能云作为领先的云服务提供商&#xff0c;都为数据库提供了配套的数据库工具服务&#xff0c;其中 DTS 是迁移与同步业务的核心服务&#xff0c;本次测试旨在深入比较阿里云与百度智能云在 DTS 数据传输服务性能方面的表现&#xff0c;为企业在选择合适的数据传输…

电商比价平台的功能讲解及数据采集分析

引言 随着电子商务的快速发展&#xff0c;电商比价平台作为连接消费者与供应商的重要桥梁&#xff0c;其重要性日益凸显。这类平台通过自动化的比价功能&#xff0c;不仅帮助消费者快速找到性价比最高的商品&#xff0c;还为企业提供了高效的采购工具&#xff0c;实现了采购成…

winfrom 文件自动生成

数据页面展示 添加定时器执行每个表数据的生成计划 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.IO; using System.Windows.Forms; using …

qt中charts图表的使用方法

折线图 #include "widget.h" #include "ui_widget.h" #include <QtCharts/QChart> #include <QtCharts/QChartView> #include <QtCharts/QLineSeries> #include<QVBoxLayout>Widget::Widget(QWidget *parent): QWidget(parent), …

知识图谱 | 基于电商网站中的商品分类目录构建知识图谱

Hi&#xff0c;大家好&#xff0c;我是半亩花海。本项目旨在构建一个基于电商网站商品分类目录的知识图谱&#xff0c;通过Python程序爬取分类信息&#xff0c;形成商品的目录树&#xff0c;并提取底层商品的概念信息。项目将重点展示如何利用知识图谱呈现概念层级知识&#xf…

等保测评练习卷17

等级保护初级测评师试题17 姓名&#xff1a; 成绩&#xff1a; 判断题&#xff08;10110分&#xff09; 1. 关于安全区域边界的安全审计&#xff0c;三级系统的要求包括应对审计进程进行保护&#x…

Java实现分卷压缩功能,不引入第三方依赖的实现方式

分卷压缩 分卷压缩是一种将一个大文件分割成多个较小文件的压缩方法。这种方法通常用于便于存储、传输或备份大文件。分卷压缩的主要特点和步骤包括: 分割大文件:将一个大文件分割成多个较小的文件,每个小文件称为一个“分卷”。压缩分卷:对每个分卷进行压缩,以减少每个分…

【复习】软件工程

软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。 典型表现&#xff1a; 开发成本和进度的估计常常很不准确 用户对已完成的软件系统不满意&#xff0c;闭门造车 软件质量&#xff08;quality&#xff09;不可靠 软件常常是不可维护的 软件产品供不应…

java的DOS命令

目录 1.DOS命令了解 DOS介绍 常用的dos命令1 DOS的基本原理 相对路径与绝对路径 常用的dos命令2 2.本章作业 1.编写hello&#xff0c;world程序 2.输出个人基本信息 3.jdk&#xff0c;jre&#xff0c;jvm关系 4.环境变量path配置及作用 5.java编写步骤 6.java编写7…

14、如何⽤DDD设计微服务代码模型

在完成领域模型设计后&#xff0c;接下来我们就可以开始微服务的设计和 落地了。在微服务落地前&#xff0c;⾸先要确定微服务的代码结构&#xff0c;也就是我 下⾯要讲的微服务代码模型。 只有建⽴了标准的微服务代码模型和代码规范后&#xff0c;我们才可以将 领域对象映射到…

C#初级——输出语句和转义字符

输出语句 在C#中&#xff0c;C#的输出语句是通过Console类进行输出&#xff0c;该类是一个在控制台下的一个标准输入流、输出流和错误流。使用该类下的Write()函数&#xff0c;即可打印要输出的内容。 Console.Write("Hello World!"); //在控制台应用中打印Hell…

websocket状态机

websocket突破了HTTP协议单向性的缺陷&#xff0c;基于HTTP协议构建了双向通信的通道&#xff0c;使服务端可以主动推送数据到前端&#xff0c;解决了前端不断轮询后台才能获取后端数据的问题&#xff0c;所以在小程序和H5应用中被广泛使用。本文主要集合报文分析对于websocket…