1.依赖异常
须知:
【 如果项目的结构是单个模块的,需要给每个单个模块添加起步依赖 spring-boot-starter-parent,指定版本 】
【 如果项目的结构是子父模块的,只需要给父模块添加起步依赖 spring-boot-starter-parent,指定版本,所有子模块引入父模块就行 】
配置文件
你指定了该项目的启动端口号是 8080
你使用了阿里的
nacos注册中心 组件,定义了服务名weather-service,及其 Nacos注册中心的地址及端口号localhost:8848
定义了集群 cluster-name :SH
定义了隔离空间 namespace:bf 6106 fa-ed 78-4 a 43-bf 22-779594 e 16 a 4 c
依赖文件
这里你可以看出该项目的结构是单个模块, 所以得加起步依赖 spring-boot-starter-parent,指定版本
这里使用了 nacos 注册中心,得加
spring-cloud依赖和spring-cloud-alibaba依赖 ,spring-cloud-alibaba是根据spring-cloud开发的,所以使用spring-cloud-alibaba的所有组件都必须添加spring-cloud依赖,还得加spring-cloud-starter-alibaba-nacos-discoverynacos 的注册中心依赖
而底下使用了
<dependencyManagement> <dependencies> 标签spring-cloud-alibaba-dependencies ,spring-cloud-dependencie统一了其组件下所有的依赖版本
            
            
              yaml
              
              
            
          
          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
              
              
            
          
          <?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解决
- 查找 nacos 是否启动
- 启动 Nacos 服务,指定其单体执行
3. Linux 的静态 ip 失效
查询 ip addr ,静态ip 没分配
尝试重启网络,无效果
解决方案如下


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"}]解决

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 多个 feign 接口使用@FeignClient 注解调用同一个名称的微服务时,启动时会引发此异常。修改即可
- 方法 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]

5. 网关的异常
1. Yml配置请求头看似不生效(网关, gateway)
其实你去看前端页面的请求头,是没有设置的请求头,是因为网关是在前端发送请求后 ,后端服务前 才生效的,所以访问后端服务时,需要先通过网关
处理 ,你可以给网关设置访问校验
有三种配置方式
- 
设置默认过滤器添加请求头 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
 
- 
设置单个路由设置过滤器添加请求头 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
- 
创建 GlobalFilter接口实现类

6. 其他异常
1. Yam 语法配错
No converter found capable of converting from type [java. Lang. String] to type [java.Util.Map (java. Long)
解决方案: 修改 application.Yml 即可



