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

【微服务】SpringBoot 通用异常处理方案使用详解

目录

一、前言

二、SpringBoot 异常介绍

2.1 SpringBoot 中异常定义

2.1.1 SpringBoot 异常处理机制的重要性

2.2 常用的异常分类

2.3 常用的异常处理解决方案

三、springboot 异常处理操作实践

3.1 springboot自适应错误处理机制

3.1.1 使用默认错误页面

3.1.2 自定义配置

3.2 springmvc 错误处理方案

3.2.1 局部控制 @ExceptionHandler 的使用

1)默认错误页面案例

2)使用@ExceptionHandler改造

3.2.2 全局控制器

3.3 springboot 错误处理方案

3.3.1 springboot 错误处理流程

3.3.1.1 如何在错误页面获取错误信息

3.3.1.2 自定义错误页面

3.3.1.3 补充说明

3.4 前后端分离项目错误处理方案

3.4.1 非前后端分离的项目错误处理方案

四、写在文末


一、前言

在使用springboot进行微服务的开发时,经常会涉及到关于系统错误和系统异常等情况的处理,在实际业务中,项目一旦上线之后,在使用过程中总会遇到各种意料之外的情况,此时就需要借助框架对异常的处理机制进行代码层面的完善,常见的情况比如说,代码层面错误,查询数据库错误,调用第三方API错误,未被捕获的错误等,本文将详细介绍如何在微服务开发中更合理的使用springboot的异常处理机制。

二、SpringBoot 异常介绍

2.1 SpringBoot 中异常定义

在 Spring Boot 应用程序中,异常(Exception)是指在程序执行过程中发生的、干扰正常流程的事件。Spring Boot 提供了一套强大的机制来管理和处理这些异常,确保应用程序能够在遇到错误时以一种受控的方式进行响应,并向用户或客户端提供有意义的反馈。

  • 异常(Exception)是在程序执行过程中出现的一种特殊情况或错误。它可以是由于程序逻辑错误、运行环境问题、用户输入错误等原因导致的一种非正常的状态或事件。

  • 在编程领域中,异常通常用来表示一种无法预料或处理的情况,它会导致程序无法继续正常执行。当程序运行过程中遇到异常,如果没有适当的处理机制,可能会导致程序崩溃或产生未预期的结果。

2.1.1 SpringBoot 异常处理机制的重要性

通常来说,在controller层如果程序出现了异常,并且这个异常未被捕获,springboot提供的异常处理机制将生效。Spring Boot 提供异常处理机制主要是为了提高应用的健壮性和用户体验。它的好处包括:

  1. 统一错误响应:可以定义全局异常处理器来统一处理各种异常,确保返回给客户端的错误信息格式一致,便于前端解析。

  2. 提升用户体验:能够优雅地处理异常情况,避免直接将技术性错误信息暴露给用户,而是显示更加友好的提示信息。

  3. 简化代码:开发者不需要在每个可能抛出异常的方法中重复编写异常处理逻辑,减少冗余代码,使业务代码更加清晰简洁。

  4. 增强安全性:通过控制异常信息的输出,防止敏感信息泄露,增加系统的安全性。

2.2 常用的异常分类

下面是关于 Spring Boot 异常的一些关键概念和分类:

  • 已检查异常(Checked Exceptions)

    • 定义:这是 Java 编译器强制要求处理的一类异常,通常是由外部因素引起的,如文件读写失败、网络连接问题等。

    • 示例:IOException, SQLException 等。

  • 未检查异常(Unchecked Exceptions 或 RuntimeExceptions)

    • 定义:也称为运行时异常,通常是由于编程错误导致的,例如空指针异常(NullPointerException)、数组越界异常(ArrayIndexOutOfBoundsException)等。这类异常不需要强制捕获,但处理它们对于保证应用的健壮性非常重要。

    • 示例:IllegalArgumentException, IllegalStateException 等。

  • 业务逻辑异常

    • 定义:这些是开发者根据具体业务场景自定义的异常类型,用于表达特定的业务规则违反情况。

    • 示例:ResourceNotFoundException, AccessDeniedException 等。

  • 系统级异常

    • 定义:当应用程序遭遇严重错误,比如内存不足、线程死锁等问题时抛出的异常。这类异常通常难以恢复,可能需要重启服务。

    • 示例:OutOfMemoryError, StackOverflowError 等。

  • HTTP 相关异常

    • 定义:与 HTTP 请求和响应相关的异常,通常发生在控制器层,用于映射到特定的 HTTP 状态码。

    • 示例:HttpMessageNotReadableException, MethodArgumentNotValidException 等。

2.3 常用的异常处理解决方案

在实际开发中,如果遇到异常需要处理,可以根据如下提供的几种方法选择合适的进行处理,不同的处理办法需要结合实际情况酌情选择:

  • 捕获异常并处理

    • 使用 try-catch 块来捕获可能抛出异常的代码块。

    • 在 try 块中编写可能引发异常的代码,然后在 catch 块中处理异常。

    • 这种方式适用于已检查异常(checked exception),以及可以预料到可能出现的异常情况。

  • 抛出异常

    • 在方法中使用 throw 关键字抛出异常,告知调用者可能发生的异常情况。

    • 通常在方法内部检测到无法处理的情况时抛出异常,将问题交给上层调用者处理。

  • 使用finally 关键字

    • finally 块中的代码总是会被执行,无论是否抛出异常,用于释放资源或者确保某些操作一定会执行。

  • 使用 try-with-resources

    • 对于实现了 AutoCloseable 接口的资源,可以使用 try-with-resources 语句,确保资源在使用后自动关闭。

    • 适用于需要手动关闭的资源管理,如文件操作、数据库连接等。

三、springboot 异常处理操作实践

3.1 springboot自适应错误处理机制

Spring Boot 的自适应错误处理机制是指应用程序能够根据不同的环境(如开发、测试或生产)以及客户端的需求,自动调整其错误响应的方式。这种机制不仅提高了用户体验,还简化了开发和运维工作。其主要处理机制和实现方式如下。

3.1.1 使用默认错误页面

Spring Boot 提供了一个内置的错误控制器 (ErrorController) 和一个默认的错误页面,当发生未处理的异常时,会自动展示该页面。这个页面可以根据请求的内容类型协商策略返回不同格式的错误信息。

  • HTML 格式:对于浏览器用户,默认错误页面会以 HTML 形式呈现,包含错误摘要、状态码、时间戳等信息。

  • JSON 或 XML 格式:对于 API 请求,默认错误页面则会返回 JSON 或 XML 格式的错误信息,适合被其他系统解析。

返回的错误格式数据样例如下:

{"timestamp": "2024-12-12T12:34:56.789+00:00","status": 404,"error": "Not Found","message": "No message available","path": "/nonexistent"
}

比如在我们的工程中,并没有updateUser这样的接口,服务启动之后,调用一下这个接口看到下面的错误页面和信息

默认情况下,这里返回的是一个错误的html页面,由springboot框架自身集成处理的,如果在实际开发中,认为这样的错误也需要前端页面做下兼容处理,可以考虑让框架针对这种错误返回json错误信息,这就是在上一篇探讨springboot的内容协商机制时候谈到的,最简单的方式就是在请求头中通过Accept来指定,参考下面的调用方式:

  • 只需要指定请求的类型即可,如果是text/html,返回的就是一个错误页面,像上面那个页面就是;

3.1.2 自定义配置

开发者可以通过配置文件(如 application.propertiesapplication.yml)来自定义错误处理行为,参考下面的做法:

  • 启用/禁用堆栈跟踪显示:

    • 在开发环境中可以显示完整的异常堆栈跟踪,而在生产环境中则隐藏这些敏感信息。

  • 设置全局错误属性:

    • 如错误消息模板、是否包含异常详情等。

  • 覆盖默认错误页面:

    • 通过创建自己的 ErrorController 实现或静态资源文件夹中的 HTML 文件来替代默认的错误页面。

参考配置示例:

# application.properties
server.error.include-stacktrace=ALWAYS # 开发模式下总是显示堆栈跟踪
server.error.include-message=ALWAYS    # 总是包含错误消息# application.yml
server:error:include-stacktrace: ALWAYSinclude-message: ALWAYS

3.2 springmvc 错误处理方案

针对错误的处理上,springmvc与springboot两个框架上面存在一定的差异,大家都知道,springboot后来居上,作为服务端的开发脚手架,内置了springmvc的所有功能,这就是说springmvc框架自身的一些机制在springboot框架中都能兼容和正常使用,但就具体使用的场景来说,仍然存在一些差一点,这里做额外的说明。

注意点:如果代码中使用了SpringMVC的错误处理方案,SpringBoot的错误处理方案不生效。

3.2.1 局部控制 @ExceptionHandler 的使用

顾名思义,对局部生效,具体到代码层面,即对某个具体的controller控制器生效,而对其他的控制器不生效,具体来说,使用@ExceptionHandler这个注解配合完成,使用方式为:

  • 在控制器当中编写一个方法,方法使用@ExceptionHandler注解进行标注,凡是这个控制器当中出现了对应的异常,则走这个方法来进行异常的处理。局部生效。

1)默认错误页面案例

在下面的一个controller接口中,如果满足参数的要求,将会抛出指定类型的异常

@GetMapping("/detail")
public Object userDetail(@RequestParam Integer id){if(id == 1){throw new IllegalArgumentException("无效ID:" + id);}return "ID = " + id;
}

请求测试看下效果,此时抛出了IllegalArgumentException这种类型的异常

  • 在当前情况下,还没有使用springmvc的局部处理方案,就走了springboot默认的错误处理方案,显示的是下面这个错误页面;

2)使用@ExceptionHandler改造

只需要在当前的controller中添加下面的错误处理方法

@ExceptionHandler(IllegalArgumentException.class)
public String handler(IllegalArgumentException e){return "错误信息:" + e.getMessage();
}

然后启动服务再次测试一下,此时自定义的局部错误处理的异常返回格式数据就生效了

3.2.2 全局控制器

使用@ControllerAdvice + @ExceptionHandler这两个组合注解可以实现全局异常控制器的作用,具体来说,将上面局部生效的方法单独放到一个类当中,这个类使用@ControllerAdvice注解标注,凡是任何控制器当中出现了对应的异常,则走这个方法来进行异常的处理,即全局生效。如下重新定义一个类,使用这两个注解的组合。

package com.congge.config;import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(IllegalArgumentException.class)@ResponseBodypublic String handler(IllegalArgumentException e){return "错误信息:" + e.getMessage();}
}

然后将上一个示例中的局部异常处理方案注释掉,再次运行项目测试,仍然也能生效,说明全局控制器生效了

3.3 springboot 错误处理方案

上面分享的主要是springmvc框架在发生异常时的主要处理方案,如果在你的项目中配置了springmvc相关的异常配置,那么springboot框架自身的异常方案将不会生效,但是在前后端分离模式比较流行的当下,springboot框架自身不仅兼容springmvc的异常处理,还在其基础上做了一定的扩展,从而使得在开发过程中更灵活的进行选择和使用。

为了方便后续操演演示看效果,这里采用thymeleaf这个模板渲染组件,在pom文件中提前导入下面的依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

3.3.1 springboot 错误处理流程

SpringBoot默认的错误处理方案如下:

  1. 如果客户端要的是json,则直接响应json格式的错误信息。

    1. 这个在前面的接口测试中已经演示了效果。

  2. 如果客户端要的是html页面,则按照下面的步骤:

    1. 第一步(精确错误码文件):

      1. 去classpath:/templates/error/目录下找404.html 、500.html等精确错误码.html文件,如果找不到,则去静态资源目录下的/error目录下找,如果还是找不到,才会进入下一步。

    2. 第二步(模糊错误码文件):

      1. 去classpath:/templates/error/目录下找4xx.html5xx.html等模糊错误码.html文件。如果找不到,则去静态资源目录下的/error目录下找。如果还是找不到,才会进入下一步。

    3. 第三步(通用错误页面):

      1. 去找classpath:/templates/error.html如果找不到则进入下一步。

    4. 第四步(默认错误处理):

      1. 如果上述所有步骤都未能找到合适的错误页面,Spring Boot 会使用内置的默认错误处理机制,即 /error 端点。

3.3.1.1 如何在错误页面获取错误信息

如果需要通过自定义错误页面的方式获取到系统的错误或堆栈信息怎么做呢?Spring Boot 默认会在模型Model中存放这些详细的错误,具体来说,包括下面一些常用的错误元素:

  • timestamp: 错误发生的时间戳

  • status: HTTP 状态码

  • error: 错误类型(如 "Not Found")

  • exception: 异常类名

  • message: 错误消息

  • trace: 堆栈跟踪

在thymeleaf中使用 ,通过类似这样的标签${message}即可取出信息

3.3.1.2 自定义错误页面

如下,在resources目录的templates目录下自定义一个error.html的文件,使用thymeleaf模板渲染的方式将系统的错误和堆栈信息等输出到error.html页面

error.html内容如下:

<!doctype html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>error</title>
</head>
<body><h1>通用错误</h1>
异常发生时间:<span th:text="${timestamp}"></span><br>
HTTP状态码:<span th:text="${status}"></span><br>
错误类型:<span th:text="${error}"></span><br>
异常类名:<span th:text="${exception}"></span><br>
错误信息:<span th:text="${message}"></span><br>
堆栈信息:<span th:text="${trace}"></span><br>
</body>
</html>

启动服务,然后请求一个不存在的接口,可以看到能够按照预期目标输出相关的错误信息

使用了自定义错误页面来获取系统的异常信息之后,那么之前的全局异常处理器返回json的格式数据就要做调整,因为需要通过自定义页面来承载各种错误信息,所以将上述的自定义全局异常处理器先去掉,再次请求一下异常的测试接口,此时能看到如下信息,说明自定义错误页面生效了

3.3.1.3 补充说明

注意:

  • springboot3.3.5版本默认只向Model对象中绑定了timestampstatuserror。如果要保存exceptionmessagetrace,需开启以下三个配置:

server.error.include-stacktrace=always
server.error.include-exception=true
server.error.include-message=always

添加上了这些配置之后,再次请求一下不存在的接口,此时堆栈的详细信息就能输出了,这样更便于排查问题

3.4 前后端分离项目错误处理方案

在当下流行前后端分离的项目开发模式下,使用springboot框架自身的错误页面来处理并非不可,而是做出来的效果没有那么好,所以在真实的开发中,建议使用SpringMVC的错误处理方案,具体来说:

  • 定义全局异常处理机制,即使用 @ControllerAdvice + @ExceptionHandler这两个注解,配合自定义全局异常处理器的方式;

  • 异常处理类中返回json格式的错误信息,其它就不需要管了,因为前端接收到错误信息之后会按照业务的规范统一处理。

3.4.1 非前后端分离的项目错误处理方案

如果在你的项目中仍然存在前后端不分离的情况,建议使用SpringBoot的错误处理方案,参考下面的建议:

  1. 如果发生的异常是HTTP错误状态码:

    1. 建议常见的错误码给定精确错误码.html

    2. 建议不常见的错误码给定模糊错误码.html

  2. 如果发生的异常不是HTTP错误状态码,而是业务相关异常:

    1. 在程序中处理具体的业务异常,自己通过程序来决定跳转到哪个错误页面。

  3. 建议提供classpath:/templates/error.html来处理通用错误。

四、写在文末

本文通过较大的篇幅结合案例操作详细分享了springboot项目中针对异常或错误的通用处理方案,异常处理可以说在任何一个微服务项目中都会涉及并需要处理的,具有较强的实践意义,希望对看到的同学有用,本篇到此结束,感谢观看。

相关文章:

【微服务】SpringBoot 通用异常处理方案使用详解

目录 一、前言 二、SpringBoot 异常介绍 2.1 SpringBoot 中异常定义 2.1.1 SpringBoot 异常处理机制的重要性 2.2 常用的异常分类 2.3 常用的异常处理解决方案 三、springboot 异常处理操作实践 3.1 springboot自适应错误处理机制 3.1.1 使用默认错误页面 3.1.2 自定义…...

初识MyBatis(详细)

目录 回顾 前提回忆下web应用程序的三层架构&#xff1a; ​编辑 一.什么是MyBatis&#xff1f; 二.Mybatis操作数据库的步骤&#xff1a; 2.1准备工作 2.2配置Mybatis(数据库连接信息&#xff09; 2.3写持久层代码 2.4测试 三.Mybatis配置文件 3.1打印日志 3.2参数传递…...

elementui表单验证,数据层级过深验证失效

先看示例代码&#xff0c;代码为模拟动态获取表单数据&#xff0c;然后动态添加rules验证规则&#xff0c;示例表单内输入框绑定form内第四层&#xff1a; <template><el-form :model"form" :rules"rules" ref"ruleForm" label-width&…...

HTTPS与HTTP:区别及安全性对比

目录 一、基础概念 二、安全性对比 1. 加密传输 2. 身份验证 3. 数据完整性 4. 端口 5. 浏览器展示方式 三、使用场景与性能 1. 使用场景 2. 性能开销 四、成本与维护 五、搜索引擎优化&#xff08;SEO&#xff09; 六、案例分析 七、隐私保护与中间人攻击 八、…...

中国石油大学(华东)自动评教工具(涵盖爬虫的基础知识,适合练手)

我开发了一个用于自动评教的工具&#xff0c;大家可以试着用用&#xff0c;下面是链接。 https://github.com/restrain11/auto_teachingEvaluate 可以点个星吗&#xff0c;感谢&#xff01;&#x1fae1; 以下是我在开发过程中学到的知识 以及 碰到的部分问题 目录 动态爬虫和静…...

蓝桥杯备考:二叉树详解

二叉树的概念和相关术语 二叉树的定义&#xff1a;每个结点度至多为2的树&#xff0c;叫二叉树 二叉树的子树有左右之分不可以随意颠倒顺序&#xff0c;也就是说二叉树是有序树 二叉树根结点左子树右子树 满二叉树&#xff1a;就是把每一层的结点都铺满 满二叉树的性质&#xf…...

大模型微调介绍-Prompt-Tuning

提示微调入门 NLP四范式 第一范式 基于「传统机器学习模型」的范式&#xff0c;如TF-IDF特征朴素贝叶斯等机器算法. 第二范式 基于「深度学习模型」的范式&#xff0c;如word2vec特征LSTM等深度学习算法&#xff0c;相比于第一范式&#xff0c;模型准确有所提高&#xff0c…...

《机器学习》——PCA降维

文章目录 PCA降维简介什么是主成分分析&#xff1f; 主成分的选择与维度确定降维的数学过程PCA降维求解步骤降维后的效果和应用场景中的优势PCA模型API参数Attributes属性PCA对象的方法 PCA降维实例导入所需库导入数据集对数据进行处理创建PCA模型并训练查看训练结果对降维数据…...

【Rust练习】28.use and pub

练习题来自&#xff1a;https://practice-zh.course.rs/crate-module/use-pub.html 1 使用 use 可以将两个同名类型引入到当前作用域中&#xff0c;但是别忘了 as 关键字. use std::fmt::Result; use std::io::Result;fn main() {}利用as可以将重名的内容取别名&#xff1a;…...

VUE学习笔记1__创建VUE实例

核心步骤 <div id"app"><!-- 这里存放渲染逻辑代码 --><h1>{{ msg }}</h1><a href"#">{{count}}</a> </div><!-- 引入在线的开发版本核心包 --> <!-- 引入核心包后全局可使用VUE构造函数 --> <…...

不用PLC和板卡,一台电脑就可以控制伺服

1、前言 大家好&#xff01;我是付工。 EtherCAT是运动控制领域使用最广泛的总线通信协议之一。 如果我们只有一台电脑&#xff0c;能不能直接控制EtherCAT总线伺服呢&#xff1f; 这个是完全可以的。 我们可以在电脑上安装实时运行环境&#xff0c;从而实现对伺服电机的总…...

vue2制作长方形容器,正方形网格散点图,并且等比缩放拖动

需求&#xff1a;有个长方形的容器&#xff0c;但是需要正方形的网格线&#xff0c;网格线是等比缩放的并且可以无线拖动的&#xff0c;并且添加自适应缩放和动态切换&#xff0c;工具是plotly.js,已完成功能如下 1.正方形网格 2.散点分组 3.自定义悬浮框的数据 4.根据窗口大小…...

鸿蒙-页面和自定义组件生命周期

页面生命周期&#xff0c;即被Entry装饰的组件生命周期&#xff0c;提供以下生命周期接口&#xff1a; onPageShow&#xff1a;页面每次显示时触发一次&#xff0c;包括路由过程、应用进入前台等场景。onPageHide&#xff1a;页面每次隐藏时触发一次&#xff0c;包括路由过程、…...

AD域学习

AD域学习 AD域一、什么是AD域二、概念三、疑问四、内容4.1、AD域的功能 五、应用实践 AD域 一、什么是AD域 AD域&#xff08;Active Directory Domain&#xff09;是微软Windows网络中的一个概念&#xff0c;它是一种计算机网络的形式&#xff0c;其中所有用户账户、计算机、…...

leetcode 3066. 超过阈值的最少操作数 II 中等

给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 一次操作中&#xff0c;你将执行&#xff1a; 选择 nums 中最小的两个整数 x 和 y 。将 x 和 y 从 nums 中删除。将 min(x, y) * 2 max(x, y) 添加到数组中的任意位置。 注意&#xff0c;只有当 nums 至少包含两个元…...

使用 WPF 和 C# 绘制覆盖网格的 3D 表面

此示例展示了如何使用 C# 代码和 XAML 绘制覆盖有网格的 3D 表面。示例使用 WPF 和 C# 将纹理应用于三角形展示了如何将纹理应用于三角形。此示例只是使用该技术将包含大网格的位图应用于表面。 在类级别&#xff0c;程序使用以下代码来定义将点的 X 和 Z 坐标映射到 0.0 - 1.…...

大数据学习(34)-mapreduce详解

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博主哦&#x1f91…...

源码编译安装httpd 2.4

方法一&#xff1a; 1、下载 Apache 源代码&#xff1a; wget https://archive.apache.org/dist/httpd/httpd-2.4.54.tar 2、解压源代码&#xff1a; tar -zxvf httpd-2.4.54.tar.gz 3、进入源代码目录&#xff1a; cd httpd-2.4.54 4、安装开发工具组&#xff1a; yum…...

1.15寒假作业

web&#xff1a;nss靶场ez_ez_php 打开环境&#xff0c;理解代码 使用个体传参的方法&#xff0c;首先代码会检查file参数的前三个字符是不是php&#xff0c;如果是就输出nice&#xff0c;然后用include函数包含file&#xff0c;绕过不是则输出hacker&#xff0c;如果没有file…...

Java中private和static同时使用会出现什么情况?

引言 这几天在学习单例设计模式&#xff08;后面会出一期包含23种设计模式介绍的博客&#xff09;的时候发现了一段代码 private static Single single; 当时我就在想&#xff0c;这个private和static一起用的话外界想要访问这个成员变量到底是能不能访问到呢&#xff1f;当…...

vue倒计时组件封装,根据每个循环项的倒计时是否结束添加新类名。

1.创建countdown.vue文件&#xff1a; <template><p style"font-size: 10px">{{time}}</p> </template> <script>export default{data () {return {time : ,flag : false}},mounted () {let time setInterval(() > {if (this.fla…...

nvim 打造成可用的IDE(2)

上一个 文章写的太长了&#xff0c; 后来再写东西 就一卡一卡的&#xff0c;所以新开一个。 主要是关于 bufferline的。 之前我的界面是这样的。 这个图标很不舒服有。 后来发现是在这里进行配置。 我也不知道&#xff0c;这个配置 我是从哪 抄过来的。 测试结果&#xff1…...

Spring Boot教程之五十五:Spring Boot Kafka 消费者示例

Spring Boot Kafka 消费者示例 Spring Boot 是 Java 编程语言中最流行和使用最多的框架之一。它是一个基于微服务的框架&#xff0c;使用 Spring Boot 制作生产就绪的应用程序只需很少的时间。Spring Boot 可以轻松创建独立的、生产级的基于 Spring 的应用程序&#xff0c;您可…...

目标检测跟踪中的Siamese孪生网络与普通卷积网络(VGG、ResNet)有什么区别?

1、什么是Siamese网络&#xff1f; Siamese网络又叫孪生网络&#xff0c;是一种特殊的神经网络架构&#xff0c;由一对&#xff08;或多对&#xff09;共享参数的子网络组成&#xff0c;用于学习输入样本之间的相似性或关系。最早在 1994 年由 Bromley 等人提出&#xff0c;最…...

AIGC时代 | 探索AI Agent的奥秘:四种设计模式引领未来智能趋势

AIGC时代 | 探索AI Agent的奥秘&#xff1a;四种设计模式引领未来智能趋势 引言 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;AI Agent作为新一代的智能代理&#xff0c;正在引领工作流程的革新。AI Agent&#xff0c;即人工智能代理&#xff0c;是一种…...

PyTorch框架——基于深度学习YOLOv5神经网络水果蔬菜检测识别系统

基于深度学习YOLOv5神经网络水果蔬菜检测识别系统&#xff0c;其能识别的水果蔬菜有15种&#xff0c;# 水果的种类 names: [黑葡萄, 绿葡萄, 樱桃, 西瓜, 龙眼, 香蕉, 芒果, 菠萝, 柚子, 草莓, 苹果, 柑橘, 火龙果, 梨子, 花生, 黄瓜, 土豆, 大蒜, 茄子, 白萝卜, 辣椒, 胡萝卜,…...

【redis】redis-cli命令行工具的使用

redis-cli命令行工具是一个功能强大的Redis客户端&#xff0c;它允许用户与Redis数据库进行交互和管理。 以下是一些常用参数的使用说明&#xff1a; 基本连接参数 -h, --host <hostname>&#xff1a;指定要连接的Redis服务器的主机名或IP地址。如果未指定&#xff0c;…...

阿里云-Centos9-安装Docker-配置镜像拉取加速地址-开机自启

阿里云-Centos9-安装Docker-配置镜像拉取加速地址-开机自启 更新镜像源安装环境配置加速卸载安装pull拉取加速开机自启 更新镜像源 # dnf update&#xff1a;更新所有已安装的软件包。 sudo dnf update -y安装环境 # 安装环境 # yum-utils&#xff1a;提供了管理yum仓库的工具。…...

Grails应用http.server.requests指标数据采集问题排查及解决

问题 遇到的问题&#xff1a;同一个应用&#xff0c;Spring Boot(Java)和Grails(Groovy)混合编程&#xff0c;常规的Spring Controller&#xff0c;可通过Micromete Pushgateway&#xff0c; 采集到http.server.requests指标数据&#xff0c;注意下面的指标名称是点号&#…...

使用 WPF 和 C# 将纹理应用于三角形

此示例展示了如何将纹理应用于三角形,以使场景比覆盖纯色的场景更逼真。以下是为三角形添加纹理的基本步骤。 创建一个MeshGeometry3D对象。像往常一样定义三角形的点和法线。通过向网格的TextureCoordinates集合添加值来设置三角形的纹理坐标。创建一个使用想要显示的纹理的 …...

【vue3项目使用 animate动画效果】

vue3项目使用 animate动画效果 前言一、下载或安装npm 安装 二、引入组件三、复制使用四、完整使用演示总结 前言 提示&#xff1a;干货篇&#xff0c;不废话&#xff0c;点赞收藏&#xff0c;用到会后好找藕~ 点击这里&#xff0c;直接看官网哦 &#x1f449; 官网地址&#…...

C#中颜色的秘密

颜色的秘密: 颜色Color是一个调色板, 所有颜色都是由透明度Alpha,红Red,绿Green,蓝Blue按不同比例调色混合而成,如果不考虑透明度Alpha,颜色共有256*256*25616777216种 ColorARGB A,R,G,B都为byte型[8位],因此可以用整体的32个整数[Int32]来表示一种颜色 Color 所属命名空…...

Spring AI 从入门到实践

​Spring AI 从入门到实践 1.什么是Spring AI 2.使用Spring Boot&Spring AI快速构建AI应用程序 3.ChatClient&Chat Model简化与AI模型的交互 4.Spring AI Prompt:与大模型进行有效沟通 5.结构化输出大模型响应 6.实战:AI聊天机器人 Ben技术站关注Java技术&#x…...

服务器一次性部署One API + ChatGPT-Next-Web

服务器一次性部署One API ChatGPT-Next-Web One API ChatGPT-Next-Web 介绍One APIChatGPT-Next-Web docker-compose 部署One API ChatGPT-Next-WebOpen API docker-compose 配置ChatGPT-Next-Web docker-compose 配置docker-compose 启动容器 后续配置 同步发布在个人笔记服…...

milvus过滤功能

数据格式: [{"id": 0, "vector": [0.3580376395471989, -0.6023495712049978, 0.18414012509913835, -0.26286205330961354, 0.9029438446296592], "color": "pink_8682", "likes": 165},{"id": 1, "vecto…...

JavaScript系列(25)--性能优化技术详解

JavaScript性能优化技术详解 ⚡ 今天&#xff0c;让我们深入探讨JavaScript的性能优化技术。掌握这些技术对于构建高性能的JavaScript应用至关重要。 性能优化基础 &#x1f31f; &#x1f4a1; 小知识&#xff1a;JavaScript性能优化涉及多个方面&#xff0c;包括代码执行效…...

基于vite+vue3+mapbox-gl从零搭建一个项目

下面是基于 Vite、Vue 3 和 Mapbox GL 从零搭建一个项目的完整步骤&#xff0c;包括环境搭建、依赖安装、配置和代码示例。 1. 初始化项目 首先&#xff0c;使用 Vite 快速创建一个 Vue 3 项目&#xff1a; npm create vuelatest vue3-mapboxgl --template vue cd vue3-mapbo…...

驱动开发系列33 - Linux Graphics mesa Intel驱动介绍

一:概述 mesa 中的 Intel 驱动体系是为支持 Intel GPU 提供图形 API 的硬件实现部分,主要包括 OpenGL、Vulkan等图形接口,Intel驱动实现整体上分为四层: 第一层:API 层, 实现 OpenGL 和 Vulkan 接口, src/mesa/main、src/vulkan。 第二层:驱动层,实现 OpenGL 和 Vulkan…...

【git】-3 github创建远程仓库,上传自己的项目,下载别人的项目

一、如何使用Github 1、创建远程仓库 2、使用github拉取/推送代码 克隆仓库 向远程仓库推送代码-git push 二、上传我们自己的项目到github 方法一&#xff1a;直接上传 方法二&#xff1a;使用git命令 方法三&#xff1a; 将仓库拉取到本地上传 三、下载别人的项目 …...

[Qt]常用控件介绍-多元素控件-QListWidget、QTableWidget、QQTreeWidget

目录 1.多元素控件介绍 2.ListWidget控件 属性 核心方法 核心信号 细节 Demo&#xff1a;编辑日程 3.TableWidget控件 核心方法 QTableWidgetItem核心信号 QTableWidgetItem核心方法 细节 Demo&#xff1a;编辑学生信息 4.TreeWidget控件 核心方法 核心信号…...

_STM32关于CPU超频的参考_HAL

MCU: STM32F407VET6 官方最高稳定频率&#xff1a;168MHz 工具&#xff1a;STM32CubeMX 本篇仅仅只是提供超频&#xff08;默认指的是主频&#xff09;的简单方法&#xff0c;并未涉及STM32超频极限等问题。原理很简单&#xff0c;通过设置锁相环的倍频系数达到不同的频率&am…...

Flink链接Kafka

一、基于 Flink 的 Kafka 消息生产者 Kafka 生产者的创建与配置&#xff1a; 代码通过 FlinkKafkaProducer 创建 Kafka 生产者&#xff0c;用于向 Kafka 主题发送消息。Flink 执行环境的配置&#xff1a; 配置了 Flink 的检查点机制&#xff0c;确保消息的可靠性&#xff0c;支…...

Maven 配置本地仓库

步骤 1&#xff1a;修改 Maven 的 settings.xml 文件 找到你的 Maven 配置文件 settings.xml。 Windows: C:\Users\<你的用户名>\.m2\settings.xmlLinux/macOS: ~/.m2/settings.xml 打开 settings.xml 文件&#xff0c;找到 <localRepository> 标签。如果没有该标…...

【PHP】双方接口通信校验服务

请求方 使用 ApiAuthService::buildUrl($domain, [terminal => 1, ts => time()]); //http://域名/adminapi/login/platformLogin?sign=F7FE8A150DEC18BE8A71C5059742C81A&terminal=1&ts=1736904841接收方 $getParams = $this->request->get();$validate…...

mac 安装docker

1、下载docker 进入 /Applications/Docker.app/Contents/MacOS/Docker Desktop.app/Contents/Resources目录 把app.asar 文件备份 将下载的中文包复制进去。修改成一样的名字 [汉化包下载地址](https://github.com/asxez/DockerDesktop-CN)...

ANSYS Fluent学习笔记(七)求解器四部分

16.亚松弛因子 Controls面板里面设置&#xff0c;它能够稳定计算的过程。如果采用常规的迭代算法可能结果就会发生振荡的情况。采用亚松驰因子可以有助于残差的稳定。 他的取值范围是0-1&#xff0c;0代表没有亚松驰&#xff0c;1表示物理量变化很快&#xff0c;一般情况下取…...

【微服务】面试 3、 服务监控 SkyWalking

微服务监控的原因 问题定位&#xff1a;在微服务架构中&#xff0c;客户端&#xff08;如 PC 端、APP 端、小程序等&#xff09;请求后台服务需经过网关再路由到各个微服务&#xff0c;服务间可能存在多链路调用。当某一微服务挂掉时&#xff0c;在复杂的调用链路中难以迅速确定…...

llamafactory使用8张昇腾910b算力卡lora微调训练qwen2-72b大模型

说明 我需要在昇腾服务器上对Qwen2-72B大模型进行lora微调&#xff0c;改变其自我认知。 我的环境下是8张910B1卡。显存约512GB。 准备&#xff1a;安装llamafactory 请参考官方方法安装llamafactory&#xff1a;https://github.com/hiyouga/LLaMA-Factory 特别强调下&…...

在服务器上增加新网段IP的路由配置

在服务器上增加新网段IP的路由配置 前提条件步骤一:检查当前路由表步骤二:添加新路由步骤三:验证新路由步骤四:持久化路由配置脚本示例结论在网络管理中,路由配置是一项基本且重要的任务。它决定了数据包在网络中的传输路径。本文将详细介绍如何在服务器上增加新的路由配置…...

2Spark Core

2Spark Core 1.RDD 详解1) 为什么要有 RDD?2) RDD 是什么?3) RDD 主要属性 2.RDD-API1) RDD 的创建方式2) RDD 的算子分类3) Transformation 转换算子4) Action 动作算子 3. RDD 的持久化/缓存4. RDD 容错机制 Checkpoint5. RDD 依赖关系1) 宽窄依赖2) 为什么要设计宽窄依赖 …...