Spring Boot实用小技巧10 - 第532篇

科技   2024-11-19 08:30   福建  

导读

历史文章(文章累计530+)

国内最全的Spring Boot系列之一
国内最全的Spring Boot系列之二
国内最全的Spring Boot系列之三
国内最全的Spring Boot系列之四
国内最全的Spring Boot系列之

国内最全的Spring Boot系列之六

国内最全的Spring Boot系列之


Spring Boot实用小技巧 -  - 第523篇

Spring Boot实用小技巧2 - 第524篇

Spring Boot实用小技巧3 - 第525篇

Spring Boot实用小技巧4 - 第526篇

Spring Boot实用小技巧5 - 第527篇

Spring Boot实用小技巧6 - 第528篇

Spring Boot实用小技巧7

Spring Boot实用小技巧8 - 第530篇

Viggle API开放,接入到自己的产品中,让照片跳起舞来

Spring Boot实用小技巧9 - 第531篇

AI视频生视频,一次支持20秒的视频,效果挺震撼 - 模仿爆款抖音账号制作爆款视频[AI视界]

技巧在手,说走就走,妈妈再也不用担心我不能按时回家吃饭了。

是使用小技巧写不动了,主要是我写不下去了😭😭😭

技巧一:屏蔽外部依赖

屏蔽外部依赖,什么意思呢?

比如大家日常开发时候有没有这样的烦恼:

项目是基于 SpringCloud 或者是 dubbo 这样的分布式服务,你需要依赖许多基础服务。比如说某个订单号的生成、获取用户信息等。

由于服务拆分,这些功能都是在其他应用中以接口的形式提供,单测还好我还可以利用 Mock 把它屏蔽掉。

但如果自己想把应用启动起来同时把自己相关的代码跑一遍呢?

通常有几种做法:

· 本地把所有的服务都启动起来。

· 注册中心换为开发环境,依赖开发环境的服务。

· 直接把代码推送到开发环境自测。

看起来三种都可以,以前我也是这么干的。但还是有几个小问题:

· 本地启动有可能服务很多,全部起来电脑能不能撑住还两说,万一服务有问题就进行不下去了。

· 依赖开发环境的前提是网络打通,还有一个问题就是开发环境代码很不稳定很大可能会影响你的测试。

· 推送到开发环境应该是比较靠谱的方案,但如果想调试只有日志大法,没有本地 debug 的效率高效。

那如何解决问题呢?既可以在本地调试也不用启动其他服务。

其实也可以利用单测的做法,把其他外部依赖 Mock 掉就行了。

大致的流程分为以下几步:

· SpringBoot 启动之后在 Spring 中找出你需要屏蔽的那个 API bean(通常情况下这个接口都是交给 Spring 管理的)。

· 手动从 bean 容器中删除该 bean

· 重新创建一个该 API 的对象,只不过是通过 Mock 出来的。

· 再手动注册进 bean 容器中。

技巧二:使用@ResponseStatus处理HTTP状态码

在处理Web请求时,有时需要返回特定的HTTP状态码。@ResponseStatus注解可以帮助我们轻松地实现这一点。

@ResponseStatus(HttpStatus.NOT_FOUND)public class UserNotFoundException extends RuntimeException {    public UserNotFoundException(String message) {        super(message);    }}

当抛出UserNotFoundException时,Spring Boot会返回404状态码。

技巧三:使用Spring BootEnvironmentPostProcessor

你可以创建一个自定义的EnvironmentPostProcessor来在应用程序启动之前修改环境变量。

import org.springframework.boot.SpringApplication;import org.springframework.boot.env.EnvironmentPostProcessor;import org.springframework.core.env.ConfigurableEnvironment;import org.springframework.core.env.PropertiesPropertySource;import org.springframework.stereotype.Component;
import java.util.Properties;
@Componentpublic class CustomEnvironmentPostProcessor implements EnvironmentPostProcessor {
@Override public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { Properties customProperties = new Properties(); customProperties.put("app.name", "MyCustomApp"); customProperties.put("app.version", "1.0.0"); environment.getPropertySources().addLast(new PropertiesPropertySource("customProperties", customProperties)); }}

你会想:我有病吧,我干嘛不在配置文件中修改完了在启动呢,我只能说你肤浅了,这个肯定是它的一个应用场景,我这里举例几个:

1)动态加载配置

当配置来源动态变化(比如从远程服务或数据库加载配置)时,使用 EnvironmentPostProcessor 可以在 Spring 加载配置之前动态添加或修改属性。

例如,将配置从第三方配置中心(如 ApolloConsulZookeeper)加载到 Spring Environment 中。

2)环境特定的配置调整

根据当前运行环境(dev, test, prod 等),动态调整某些配置值。

3)优先级调整或自定义配置源

Environment 中已有的配置属性源(PropertySource)进行重新排序或覆盖。

例如,确保某些属性的优先级高于 application.properties,或为特定的业务逻辑加载额外的配置源。

4)环境变量的验证或强制性设置

检查关键配置是否存在或满足要求。如果不存在,抛出异常或提供默认值。

例如,强制要求配置 server.port 的值符合某个范围,否则应用无法启动。

5)兼容性调整

在迁移老系统时,对配置的兼容性调整。

例如,将旧的配置名映射到新的配置名,保证新老版本兼容。

6)安全性检查

验证敏感配置(如密钥、访问令牌等)是否符合预期规则,防止配置出错或暴露风险。

技巧四:DEBUG远程调试黑科技?

所谓的远程调试就是服务端程序运行在一台远程服务器上,我们可以在本地服务端的代码(前提是本地 的代码必须和远程服务器运行的代码一致)中设置断点,每当有请求到远程服务器时时能够在本地知道 远程服务端的此时的内部状态。

如何开始调试?

l 如果使用的是 Java SE 5 之前的版本,则使用的调试命令格式如下:java -Xdebug -Xrunjdwp:...

l 如果你使用的是 Java SE 5 之后的版本,则使用的命令格式如下:java -agentlib:jdwp=...

IDEA如何开启远程调试?

首先的将打包后的Spring Boot项目在服务器上运行,执行如下命令(各种参数根据实际情况自己配置):

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9193 -jar debug-demo.jar

1项目启动成功后,点击 Edit Configurations,在弹框中点击 + 号,然后选择Remote/远程JVM调试

2)然后填写服务器的地址及端口,点击 OK 即可。

以上步骤配置完成后,点击DEBUG调试运行即可。

技巧五:在线状态监控与日志下载

Spring Boot Admin 具备强大的在线状态监控功能。它能够实时跟踪应用程序的运行状况,并在出现问题时及时发出警报。这种即时反馈机制对于保证系统的稳定性和可靠性至关重要。

更重要的是,Spring Boot Admin 支持直接从界面上下载主日志文件。这对于调试错误或者分析系统行为非常有用。开发者不再需要手动登录到服务器去查找日志,而是可以直接通过 Spring Boot Admin 的界面来访问它们。这一特性极大地提高了问题解决的速度和效率。


历史文章(文章累计530+)
国内最全的Spring Boot系列之一
国内最全的Spring Boot系列之二
国内最全的Spring Boot系列之三
国内最全的Spring Boot系列之四
国内最全的Spring Boot系列之

国内最全的Spring Boot系列之六

国内最全的Spring Boot系列之

idea springboot woff/woff2/eot/ttf/svg等小图标不显示的问题 - 第515篇

Noisee AI中文站网页版 AI 音乐生成视频全新登场,快来抢先体验——国内第一个登场的中文站来袭  - 516篇

Spring的SmartLifecycle可以没用过,但没听过就不好了!- 第517篇

SpringBoot异常处理机制之自定义404、500错误提示页面 - 518篇

SpringBoot 中多例模式的神秘世界:用法区别以及应用场景,最后的灵魂拷问会吗?- 第519篇

SpringBoot开发的AI导航站技术架构剖析 —— 技术如何选型 -  第520篇

SpringBoot多例模式,在同一个类中注入两次是否是同一个对象 – 一不小心就会写出一个重大BUG!!- 521篇

SpringBoot基本原理,轻松应对面试官 - 第522篇

Spring Boot实用小技巧 -  - 第523篇

Spring Boot实用小技巧2 - 第524篇

Spring Boot实用小技巧3 - 第525篇

Spring Boot实用小技巧4 - 第526篇

万物皆能舞,AI让你秒变“舞”林高手 – Viggle AI“舞”所不能

法定年龄退休2024年新规,我要到63岁才能退休了,看看你几岁退休,附退休对照表

Suno新上线Covers翻唱新 - 实现音频风格任意转换

Spring Boot实用小技巧5 - 第527篇

Spring Boot实用小技巧6 - 第528篇

又一款AI对口型神器,让照片开口说话唱歌,1分钟教会(附保姆级教程)

Spring Boot实用小技巧7

Spring Boot实用小技巧8 - 第530篇

Viggle API开放,接入到自己的产品中,让照片跳起舞来

Spring Boot实用小技巧9 - 第531篇

AI视频生视频,一次支持20秒的视频,效果挺震撼 - 模仿爆款抖音账号制作爆款视频[AI视界]


SpringBoot
Suno AI制作音乐,Viggle AI - 照片跳舞,AI音乐,Noisee AI制作MV。Spring Boot技术。博客已有400+,文章特色:一个知识点一个系列、让技术变得简单、文章轻松幽默,悟纤和师傅趣谈更是轻松有趣。
 最新文章