Nacos服务列表有服务,但是配置列表不起作用。
想要重新再写一下springcloud alibaba 的组件配置,再另一个服务renren-product引入,nacos的注册发现和配置中心。前面都很顺利但是修改配置中心配置的时候不起作用!!! 另一个服务代码相同但是起作用了,对比了很多次,最终发现是poom文件的依赖问题!! 分享一下解决思路。
bug现场
请求端口
controller代码
application.properties
bootstrap.properties
nacos配置中心
具体配置
nacos服务列表
服务列表删除后又能重新生成一个实例对象,就说明加载nacos没问题。
解决思路
如果在 Nacos 服务列表中看到了 “gulimall-product” 服务,但 Nacos 配置中心对其配置没有作用,可能存在以下一些情况:
-
配置名称不匹配: 确保在 Nacos 配置中心中的配置项的名称(Data ID)与 “gulimall-product” 服务的应用名称或 Group 名称匹配。默认情况下,Nacos 使用服务名称作为 Group 名称,因此 Data ID 应该是类似于
gulimall-product.properties
的形式。 -
配置生效范围: 确保配置项的生效范围正确。在 Nacos 中,配置项可以设置为全局配置或特定服务的配置。如果配置项的生效范围设置为全局,它将应用于所有服务,而不仅仅是 “gulimall-product”。
-
配置版本: 检查配置项的版本是否与 “gulimall-product” 服务的版本匹配。如果你在配置项中指定了版本,确保服务也使用相同的版本。
-
配置刷新: 如果你在 Nacos 配置中心中修改了配置,但没有触发配置的刷新,那么服务可能仍然使用之前的配置。确保配置的刷新机制已经正确配置,并且服务能够接收到配置的更改通知。
-
服务的配置读取: 确保 “gulimall-product” 服务在启动时正确地读取了配置项。如果服务没有正确配置配置中心的客户端或未正确处理配置,那么它可能不会使用配置中心的配置。
-
配置项的优先级: 如果在服务的配置中已经定义了某些配置,这些配置可能会覆盖来自配置中心的配置。确保没有在服务本地配置中硬编码了与配置中心配置冲突的值。
-
Nacos 配置中心的问题: 有时 Nacos 配置中心本身可能出现问题,导致配置无法正确发布或生效。检查 Nacos 配置中心的状态和日志以查看是否存在任何问题。
如果以上情况都排除并且问题仍然存在,建议检查服务的日志以查看是否有有关配置读取和生效的错误或警告信息。同时,确保服务已正确集成 Nacos 配置中心的客户端,并且在应用启动时能够成功连接到 Nacos 服务器并获取配置。如果仍然无法解决问题,可能需要详细查看服务的代码和配置,以确定问题的根本原因。
POM文件
因为product和coupon服务共同依赖了,common服务。所以就没往pom文件配置的方面想。后面是在没办法,就是一行行对比Maven依赖!!最终发现product服务没有依赖这个spring-cloud-starter-bootstrap
,这个包。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
恶心的是因为在application.properties
中设置了,注入的值。所以不会报错!!
启动日志排查
配置文件不起作用从启动日志框起来的地方也能看到。
完整pom文件
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.atguigu.gulimall</groupId>
<artifactId>gulimall-product</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>gulimall-product</name>
<description>商品服务</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>2021.0.3</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>com.atguigu.gulimall</groupId>
<artifactId>gulimall-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
nacos配置中心部署流程
- 1、如何使用nacos作为配置中心来统一配置管理
- 1)、引入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
- 2)、创建一个bootstrap.properties
-
spring.application.name=gulimall-coupon
-
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
切记!切记!切记!检查pom文件是否配置加载bootstrap.properties的包
- 3)、需要给配置中心默认添加一个叫数据集(Data Id) gulimall-coupon.properties。默认规则,应用名.properties
- 4)、给 应用名.properties 添加任何配置
- 5)、动态获取配置 Controller层添加
-
@RefreshScope:动态获取并刷新配置
-
@Value("${配置项的名}"):获取到配置
如果配置中心和当前应用的配置文件中都配置了相同的项,优先使用配置中心的配置
更多推荐
所有评论(0)