java微服务的异常

ops/2025/1/23 6:18:03/

1.依赖异常

须知:
【 如果项目的结构是单个模块的,需要给每个单个模块添加起步依赖 spring-boot-starter-parent,指定版本 】
【 如果项目的结构是子父模块的,只需要给父模块添加起步依赖 spring-boot-starter-parent,指定版本,所有子模块引入父模块就行 】

配置文件

  1. 你指定了该项目的启动端口号是 8080
  2. 你使用了阿里的 nacos 注册中心组件,定义了服务名 weather-service ,及其 Nacos注册中心的地址及端口号 localhost:8848
  3. 定义了集群 cluster-name :SH
  4. 定义了隔离空间 namespace:bf 6106 fa-ed 78-4 a 43-bf 22-779594 e 16 a 4 c

依赖文件

  1. 这里你可以看出该项目的结构是单个模块, 所以得加起步依赖 spring-boot-starter-parent,指定版本
  2. 这里使用了 nacos 注册中心,得加 spring-cloud 依赖和 spring-cloud-alibaba 依赖 , spring-cloud-alibaba 是根据 spring-cloud 开发的,所以使用 spring-cloud-alibaba 的所有组件都必须添加 spring-cloud 依赖,还得加 spring-cloud-starter-alibaba-nacos-discovery nacos 的注册中心依赖
  3. 而底下使用了 <dependencyManagement> <dependencies> 标签 spring-cloud-alibaba-dependencies ,spring-cloud-dependencie 统一了其组件下所有的依赖版本
server:  port: 8080  spring:  #注册服务到Nacos  application:  name: weather-service #服务名  cloud:  nacos:  discovery:  server-addr: localhost:8848 #Nacos注册中心的地址及端口号  cluster-name: SH  namespace: bf6106fa-ed78-4a43-bf22-779594e16a4c     
<?xml version="1.0" encoding="UTF-8"?>  
<project xmlns="http://maven.apache.org/POM/4.0.0"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>cn.itcast</groupId>  <artifactId>xiaohua-service</artifactId>  <version>1.0-SNAPSHOT</version>  <packaging>jar</packaging>  <!--  war: 传统web项目  jar(默认):java项目   spring boot项目统一打包方式jar  pom:父工程-->  <!--jdk编译版本-->  <properties>  <java.version>1.8</java.version>  </properties>  <!--spring boot父工程-->  <parent>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-parent</artifactId>  <version>2.3.4.RELEASE</version>  <relativePath/> <!-- lookup parent from repository -->  </parent>  <dependencies>  <!--        导入nacos注册中心组件-->  <dependency>  <groupId>com.alibaba.cloud</groupId>  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>  </dependency>  <!--spring boot整合junit起步依赖-->  <dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-test</artifactId>  <scope>test</scope>  <exclusions>                <exclusion>  <groupId>org.junit.vintage</groupId>  <artifactId>junit-vintage-engine</artifactId>  </exclusion>  </exclusions>  </dependency>  <!--spring boot整合springmvc起步依赖-->  <dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-web</artifactId>  </dependency>  <!--spring boot整合mp起步依赖-->  <dependency>  <groupId>com.baomidou</groupId>  <artifactId>mybatis-plus-boot-starter</artifactId>  <version>3.4.2</version>  </dependency>  <!--lombok依赖-->  <dependency>  <groupId>org.projectlombok</groupId>  <artifactId>lombok</artifactId>  </dependency>  <!--fastjson的依赖-->  <dependency>  <groupId>com.alibaba</groupId>  <artifactId>fastjson</artifactId>  <version>1.2.76</version>  </dependency>  <!--apache工具包,提供大量工具类,简化操作,eg:判断字符串是否为""字符串...  StringUtils.isEmpty()            StringUtils.isBlank()        -->        <dependency>  <groupId>commons-lang</groupId>  <artifactId>commons-lang</artifactId>  <version>2.6</version>  </dependency>  <!--mysql驱动-->  <dependency>  <groupId>mysql</groupId>  <artifactId>mysql-connector-java</artifactId>  <scope>runtime</scope>  </dependency>  <!--durid连接池依赖-->  <dependency>  <groupId>com.alibaba</groupId>  <artifactId>druid-spring-boot-starter</artifactId>  <version>1.1.23</version>  </dependency>  <dependency>            <groupId>com.alibaba.cloud</groupId>  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>  </dependency>  </dependencies>  <dependencyManagement>        <dependencies>  <dependency>  <groupId>org.springframework.cloud</groupId>  <artifactId>spring-cloud-dependencies</artifactId>  <version>Greenwich.RELEASE</version>  <type>pom</type>  <scope>import</scope>  </dependency>  <dependency>                <groupId>com.alibaba.cloud</groupId>  <artifactId>spring-cloud-alibaba-dependencies</artifactId>  <version>2.1.0.RELEASE</version>  <type>pom</type>  <scope>import</scope>  </dependency>  </dependencies>  </dependencyManagement>  <build>        <plugins>  <!--spring boot项目打jar包插件  只有引入该插件,打成jar包才可以使用java -jar 运行  -->  <plugin>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-maven-plugin</artifactId>  <version>2.4.5</version>  </plugin>  </plugins>  </build>  
</project>

2. Nacos 程序没启动

问题

当 Nacos 程序没启动时/ Nacos 没有指定单体启动时(Nacos 默认集群启动) ,会导致 Nacos 服务启动失败

java">2024-11-02 00:08:41.354 ERROR 37164 --- [           main] c.a.c.n.registry.NacosServiceRegistry    : nacos registry, weather-service register failed...NacosRegistration{nacosDiscoveryProperties=NacosDiscoveryProperties{serverAddr='localhost:8848', endpoint='', namespace='', watchDelay=30000, logName='', service='weather-service', weight=1.0, clusterName='DEFAULT', namingLoadCacheAtStart='false', metadata={preserved.register.source=SPRING_CLOUD}, registerEnabled=true, ip='192.168.240.94', networkInterface='', port=8080, secure=false, accessKey='', secretKey=''}},java.lang.IllegalStateException: failed to req API:/nacos/v1/ns/instance after all servers([localhost:8848]) tried: failed to req API:localhost:8848/nacos/v1/ns/instance. code:500 msg: java.net.ConnectException: Connection refused: connect

解决

  1. 查找 nacos 是否启动
    image.png
  1. 启动 Nacos 服务,指定其单体执行
    image.png

3. Linux 的静态 ip 失效

查询 ip addr ,静态ip 没分配
image.png

尝试重启网络,无效果
image.png

解决方案如下

image.png
image.png

4. Feign 的异常

1. Feign 请求参数异常(2)

错误原因是: feign 的请求参数不完全

6:09:05: 856  INFO 58348 --- [           main] com.hmall.search.feignTest               : No active profile set, falling back to default profiles: default
16:09:06:180  WARN 58348 --- [           main] o.m.s.mapper.ClassPathMapperScanner      : No MyBatis mapper was found in '[com.hmall]' package. Please check your configuration.
16:09:06:229  INFO 58348 --- [           main] o.s.cloud.context.scope.GenericScope     : BeanFactory id=24dddd9d-1203-3d7a-841c-d55b879e19b0
16:09:06:541  WARN 58348 --- [           main] c.n.c.sources.URLConfigurationSource     : No URLs will be polled as dynamic configuration sources.
16:09:06:541  INFO 58348 --- [           main] c.n.c.sources.URLConfigurationSource     : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
16:09:06:547  WARN 58348 --- [           main] c.n.c.sources.URLConfigurationSource     : No URLs will be polled as dynamic configuration sources.feign.FeignException$NotFound: [404] during [GET] to [http://item-service/list?page=1&size=5] [ItemClientFeign#pagelist(Integer,Integer)]: [{"timestamp":"2024-11-16T08:09:10.069+00:00","status":404,"error":"Not Found","message":"","path":"/list"}]

解决

image.png

2. FeignClient 注解注册重复
***************************
APPLICATION FAILED TO START
***************************Description:
The bean ‘xxx.FeignClientSpecification‘ could not be registered.The bean 'xxx.FeignClientSpecification' could not be registered. A bean with that name has already been defined and overriding is disabled.Action:Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true

解决

  1. 方法 1 多个 feign 接口使用@FeignClient 注解调用同一个名称的微服务时,启动时会引发此异常。修改即可
  2. 方法 2: 在配置文件中增加配置 spring.main.allow-bean-definition-overriding=true
3. Feign 远程 A调用 B,A 异常,B 也会报错(B 报的错)

A 服务报的错会比较模糊

feign. FeignException$InternalServerError: [500] during [GET] to [http://user-service/user/getUserById?id=2] [UserClientFeign #getUserById (Long)]: [{“timestamp”: “2024-11-18 T14:39:28.153+00:00”,“status”: 500,“error”: “Internal Server Error”,“message”: “”,“path”: “/user/getUserById”}]

B 服务就很清楚

SQL: SELECT id, username, password, phone, status, balance, create_time, update_time FROM tb_user WHERE id=?
Cause: com. Mysql. Jdbc. Exceptions. Jdbc 4. MySQLSyntaxErrorException: Unknown column ‘create_time’ in ‘field list’
; bad SQL grammar []; nested exception is com. Mysql. Jdbc. Exceptions. Jdbc 4. MySQLSyntaxErrorException: Unknown column ‘create_time’ in ‘field list’] with root cause
Com. Mysql. Jdbc. Exceptions. Jdbc 4. MySQLSyntaxErrorException: Unknown column ‘create_time’ in ‘field list’
At java. Base/jdk. Internal. Reflect. NativeConstructorAccessorImpl. NewInstance 0 (Native Method) ~[na: na]
At java. Base/jdk.Internal.Reflect.NativeConstructorAccessorImpl.NewInstance (NativeConstructorAccessorImpl. Java:62) ~[na: na]
At java. Base/jdk.Internal.Reflect.DelegatingConstructorAccessorImpl.NewInstance (DelegatingConstructorAccessorImpl. Java:45) ~[na: na]
At java. Base/java.Lang.Reflect.Constructor.NewInstance (Constructor. Java:490) ~[na: na]

image.png

5. 网关的异常

1. Yml配置请求头看似不生效(网关, gateway)

其实你去看前端页面的请求头,是没有设置的请求头,是因为网关是在前端发送请求后后端服务前才生效的,所以访问后端服务时,需要先通过网关
处理,你可以给网关设置访问校验

有三种配置方式

  1. 设置默认过滤器添加请求头
spring:  
application:  name: gatway-service  
cloud:  nacos:  discovery:  server-addr: localhost:8848  gateway:  routes:  - id: item-service  uri: lb://item-service  predicates:  - Path=/item/**  #给所有路由添加请求头
default-filters:- AddRequestHeader=authorization, 2
  1. 设置单个路由设置过滤器添加请求头
spring:  application:  name: gatway-service  cloud:  nacos:  discovery:  server-addr: localhost:8848  gateway:  routes:  - id: item-service  uri: lb://item-service  predicates:  - Path=/item/**  
#给单个路由添加请求头filters:  - AddRequestHeader=authorization,2
  1. 创建 GlobalFilter 接口实现类

image.png

6. 其他异常

1. Yam 语法配错

No converter found capable of converting from type [java. Lang. String] to type [java.Util.Map (java. Long)

解决方案: 修改 application.Yml 即可

2. Lang 类型转为 JSON 精度丢失

http://www.ppmy.cn/ops/152388.html

相关文章

如何保证Bitmap数据在多个服务器间的一致性

Bitmap&#xff08;位图&#xff09;是一种常用的数据结构&#xff0c;用于高效地表示和处理大量数据的状态或集合。在多个服务器间保证 Bitmap 数据的一致性是一个具有挑战性的问题&#xff0c;特别是在分布式系统中&#xff0c;需要考虑网络延迟、节点故障等因素。以下是一些…

win内核内部直接irp读取文件写入文件

#include <ntifs.h> #include <ntddk.h> #define TAG_NAME tlfF // FltF in reverse #define BUFFER_SIZE PAGE_SIZE // 驱动设备扩展结构 typedef struct _DEVICE_EXTENSION { PDEVICE_OBJECT DeviceObject; UNICODE_STRING DeviceName; UNICODE_STRIN…

EXCEL的一些用法记录

按某个分隔符进行拆分多列 【数据】- 【分列】 多列调整成多行 复制 - 粘贴 - 选择【转置】 部分内容替换 SUBSTITUTE()函数 &#xff0c;固定内容 加“”

麒麟监控工具rpm下载

确认系统 sar - sysstat mtr iostat - sysstat netstat - net-tools https://update.cs2c.com.cn/NS/V10/V10SP3-2403/os/adv/lic/base/x86_64/Packages/sysstat-12.2.1-7.p01.ky10.x86_64.rpm https://update.cs2c.com.cn/NS/V10/V10SP3-2403/os/adv/lic/base/x86_64/Packag…

PyTest自学 - pytest的各种执行方式

<< 返回目录 1 PyTest自学 - pytest的各种执行方式 不带任何参数执行   在命令行下将目录切换到测试用例所在目录&#xff0c;执行pytest tyyDESKTOP-G7V9IT0 ~ $ cd /cygdrive/d/TYYSOFT/Study/Python/pytesttyyDESKTOP-G7V9IT0 /cygdrive/d/TYYSOFT/Study/Python/…

Gin 框架入门实战系列教程

一&#xff0c;Gin介绍 Gin是一个 Go (Golang) 编写的轻量级 http web 框架&#xff0c;运行速度非常快&#xff0c;如果你是性能和高效的追求者&#xff0c;我们推荐你使用Gin框架。 Gin最擅长的就是Api接口的高并发&#xff0c;如果项目的规模不大&#xff0c;业务相对简单…

Stable diffusion 都支持哪些模型

Stable Diffusion 支持多种模型&#xff0c;主要包括以下几类&#xff1a; 官方基础模型&#xff1a; SD 1.x 系列&#xff08;如 Stable Diffusion 1.4、1.5&#xff09;&#xff1a;这是最经典的模型&#xff0c;适合多种通用场景&#xff0c;使用简单且易于上手。SD 2.x 系列…

Vue.js 什么是 Vue Router

Vue.js 什么是 Vue Router Vue Router 是 Vue.js 的官方路由管理器&#xff0c;专为构建单页应用&#xff08;SPA&#xff09;而设计。它与 Vue.js 核心深度集成&#xff0c;使开发者能够轻松地在应用中管理和导航不同的视图。 Vue Router 的功能 嵌套路由映射&#xff1a;支…