当OpenFeign遇到全局异常处理
环境信息: Java 8、Spring Boot 2.x、Spring Cloud 2021.x
引言微服务中的异常传递在使用Feign进行远程调用、开启了熔断降级且存在全局异常处理时,异常的传递就变得尤为重要。
在微服务架构中,服务之间的调用是通过网络进行的,因此在调用过程中可能会出现各种异常,如网络超时、服务不可用等。
为了保证服务的稳定性,我们需要对这些异常进行处理,以避免异常在服务之间传递,导致整个系统的不稳定。
调用的几种情况
假设此时A服务正在调用B服务,通常会涉及以下几种情况:
B服务成功返回
B服务抛出异常,被全局异常处理器拦截后正常返回,因为全局异常拦截会将异常封装为统一结果对象返回,此时是不会走降级逻辑的
B服务抛出异常,被全局异常处理器拦截后,继续抛出异常,此时会走降级逻辑并返回结果
详细分析基础准备
创建一个SpringCloud项目,并引入OpenFeign、Sentinel或Hystrix依赖,以实现服务间的调用和降级。
自定义返回状态码
1234567891011121314151617181920/** * 返回码 * * @author ...
Spring框架中最佳依赖注入方式探讨
引言什么是依赖注入?依赖注入(Dependency Injection,简称DI)是一种设计模式,用于实现软件组件之间的松耦合。在面向对象编程中,依赖指一个对象需要另一个对象来完成某项任务。依赖注入的核心思想是,将对象所依赖的其他对象,通过外部传递给它,而不是让对象自己去创建或查找这些依赖。
依赖注入的优点
提高代码的可测试性:依赖注入使得单元测试更加容易,因为可以轻松地使用模拟对象替换真实依赖。
增强组件的可重用性:通过依赖注入,可以轻松替换组件的实现,从而提高代码的可维护性和可扩展性。
减少耦合度:依赖注入促进了松耦合设计,使得组件之间的依赖关系更加清晰和可管理。
Spring框架中的依赖注入Spring框架通过其IoC(Inversion of Control,控制反转)容器实现了强大的依赖注入功能,极大地简化了对象之间的依赖管理。 IoC容器是依赖注入的核心,负责创建、配置和管理对象的生命周期。容器通过读取配置文件或注解来识别和注入依赖对象。
依赖注入的类型构造函数注入1234567891011@Componentpublic class MyService { ...
PowerShell自定义函数
概述Windows PowerShell 是一种命令行脚本语言和脚本环境,它是 Windows 系统中的一个强大工具,可以帮助用户更高效地管理和操作系统。在 PowerShell 中,我们可以通过定义和调用函数来实现代码的复用和模块化。
本文将介绍如何在 PowerShell 中定义和调用函数。
需求说明在使用Git时,在 PowerShell 中定义一个函数,实现对Git的http代理进行便捷的设置和取消。
注意:该代理为http代理,而非ssh代理。
实现步骤定义函数在 PowerShell 中,我们可以通过 function 关键字来定义函数,函数的基本语法如下:
123function 函数名 { # 函数体}
下面是一个设置和取消 Git 代理的函数的示例,请注意端口按需修改:
12345678910111213141516function gitProxy { param([string]$status) switch ($status) { "on" { ...
MySQL字段类型注意点
数字类型整形类型整形中分为signed有符号(默认)和unsigned无符号。
一般情况下不建议设置为无符号,因为会导致一些问题
例如:MySQL要求设置为unsigned的两个值相减的结果仍然为unsigned,否则会导致抛出[22001][1690] Data truncation: BIGINT UNSIGNED value is out of range in 'xxx'异常。如果确实要使用,可以通过设置SET sql_mode='NO_UNSIGNED_SUBTRACTION';来关闭这个检查。
自增类型作为主键时,务必要使用BIGINT,而不是INT
因为INT最大值为2147483647,很容易达到上限,达到上限后再次插入会导致主键冲突。
MySQL8.0之前,自增整型会有回溯问题
当删除ID为4的记录后,如果MySQL服务器重启,那么下一个插入的ID依旧可能为4
浮点类型和高精度类型
浮点类型:FLOAT和DOUBLE在存储时会有精度问题,且在MySQL后续版本中可能会被废弃,建议使用高精度DECIMAL类型
D ...
自定义SpringBoot-Starter
概述什么是 SpringBoot-StarterSpring Boot Starter 是 Spring Boot 框架中的一个重要概念,它是一种用于简化项目配置和依赖管理的方式。在 Spring Boot 中,应用程序通常需要引入许多依赖库和配置,以实现特定的功能或集成特定的技术栈。Spring Boot Starter 通过预定义的依赖和配置来简化这个过程,让开发人员能够更轻松地搭建和配置应用程序。
为什么要自定义 Starter
模块化和复用性: 自定义 Starter 允许你将通用功能封装为可重用的模块。这可以使你在多个项目中轻松地使用相同的功能,减少重复代码的编写。
内部标准化: 如果你的组织内部有一些通用的技术选型、配置和最佳实践,你可以创建自定义 Starter 来强制执行这些标准,从而提高代码的一致性和可维护性。
简化团队开发: 自定义 Starter 可以帮助团队成员更容易地使用相同的技术栈和配置,减少了新成员加入或跨项目切换时的学习曲线。
定制化需求: 你可以根据项目的特定需求创建自定义 Starter,将其与通用功能集成,从而更好地满足项目的独特要求。
隐藏复杂性 ...
将项目打包成Docker
概述对SpringBoot应用程序进行Docker容器化是软件开发者的一项基本技能,因为它可以在容器化环境中高效部署和管理应用程序。同时将SpringBoot应用打包到Docker容器中可以确保跨平台的一致性且便于后期扩展。
准备工作首先准备一个SpringBoot项目,在项目中添加一个接口用于测试。
12345678@RestControllerpublic class HelloController { @GetMapping("/hello") public String hello() { return "Hello Docker!"; }}
启动项目,访问http://localhost:8080/hello,确保接口可以正确响应。
1$ mvn clean spring-boot:run
1$ curl -v localhost:8080/hello
执行上述命令后将看到如下输出:
123456789101112131415curl -v localhost: ...
CompletableFuture的使用
CompletableFuture类提供了非常强大的Future的扩展功能,可以帮助我们简化异步编程的复杂性,提供了函数式编程的能力,可以通过回调的方式处理计算结果,并且提供了转换和组合CompletableFuture的方法。
总结
分类
方法名
描述
创建异步任务
runAsync
不支持返回值
supplyAsync
支持返回值
创建异步任务
thenRun、thenRunAsync
不接参数、无返回值
thenAccept、thenAcceptAsync
接返回值、无返回值
thenApply、thenApplyAsync
接返回值、有返回值
exceptionally、exceptionall ...
Hello Hexo
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick StartCreate a new post1$ hexo new "New Post"
More info: Writing
Run server1$ hexo server
More info: Server
Clean cache1$ hexo clean
More info: Commands Clean
Generate static files1$ hexo generate
More info: Generating
Deploy to remote sites1$ hexo deploy
More info: Deployment