解决:Nacos无法获取远程配置数据,导致项目启动各种配置异常
- 一·问题描述:
- 1.项目pom依赖版本:
- 2.bootstrap.yml配置信息
- 3.远程配置:默认public命名空间
- 4.启动报异常,显示没有配置数据源,实际远程已经配置了,也就是说没有成功拉取到远程配置数据
- 二·问题原因:
- 1.远程配置文件的DataId没有加`yaml`后缀名,导致项目获取远程配置数据失败,从而引发项目启动异常
- 三·解决方案:
- 1.注意SpringCloud、SpringCloudAlibaba、SpringBoot、Nacos的组件版本匹配
- 1-1 推荐两套版本组合依赖:
- 1-2 SpringCloudAlibaba与各种组件版本匹配图
- 1-3 SpringCloud与SpringBoot版本匹配图
- 2.本地bootstrap.yml配置规范-示例:
- 3.远程配置文件取名要规范:
- 3-1 Data ID拼接格式:${prefix} - ${spring.profiles.active} . ${file-extension},
- 3-2 Group:
- 3-3 NameSpace(命名空间):
- 3-4 远程配置文件DataId必须加上`yaml`后缀名:否则会出现获取不到远程配置异常
- 4.项目启动类配置nacos服务注册发现注解:
- 四·验证:启动服务成功!![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b320fa8f26054438810586392c1a181d.png)
一·问题描述:
1.项目pom依赖版本:
2.bootstrap.yml配置信息
3.远程配置:默认public命名空间
4.启动报异常,显示没有配置数据源,实际远程已经配置了,也就是说没有成功拉取到远程配置数据
二·问题原因:
1.远程配置文件的DataId没有加yaml
后缀名,导致项目获取远程配置数据失败,从而引发项目启动异常
三·解决方案:
1.注意SpringCloud、SpringCloudAlibaba、SpringBoot、Nacos的组件版本匹配
1-1 推荐两套版本组合依赖:
<properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><!-- 第一套版本组合--><!-- <spring.boot.version>3.0.2</spring.boot.version>--><!-- <spring.cloud.version>2022.0.0</spring.cloud.version>--><!-- <spring.cloud.alibaba.version>2022.0.0.0-RC2</spring.cloud.alibaba.version>--><!-- 第二套版本组合--><spring.boot.version>3.3.0</spring.boot.version><spring.cloud.version>2023.0.2</spring.cloud.version><spring.cloud.alibaba.version>2023.0.1.0</spring.cloud.alibaba.version>
</properties><dependencyManagement>
<dependencies><!--springboot 依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>${spring.boot.version}</version><type>pom</type><scope>import</scope></dependency><!--springcloud 依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring.cloud.version}</version><type>pom</type><scope>import</scope></dependency><!--springcloud alibaba 依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring.cloud.alibaba.version}</version><type>pom</type><scope>import</scope></dependency>
</dependencies>
</dependencyManagement>
1-2 SpringCloudAlibaba与各种组件版本匹配图
1-3 SpringCloud与SpringBoot版本匹配图
2.本地bootstrap.yml配置规范-示例:
server:port: 9004
spring:application:name: cloud-nacos-config-consumer-9004profiles:#激活dev环境配置active: dev#Springcloud配置cloud:#nacos配置nacos:#配置中心配置config:#nacos配置中心地址:跟注册地址一样,会自动从远程拉取配置文件应用server-addr: 127.0.0.1:8848#配置文件后缀格式file-extension: yaml
# namespace: Dev-NameSpace
# group: DEFAULT_GROUP
# username: nacos
# password: nacos#服务注册配置discovery:# nacos服务注册中心地址:本应用将会注册在下面这个地址服务上面,nacos本身也是一个单独的服务应用server-addr: 127.0.0.1:8848
# namespace: Dev-NameSpace
# group: DEFAULT_GROUP
3.远程配置文件取名要规范:
nacos会自动根据规则从远程配置中心拉取数据:命名空间-分组-DataId
,然后再与本地application配置文件整合,从而形成最终配置数据(远程配置 > 本地配置)
3-1 Data ID拼接格式:${prefix} - ${spring.profiles.active} . ${file-extension},
-
prefix:默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix 来配置
-
spring.profiles.active:取 spring.profiles.active 的值,即为当前环境对应的 profile
-
file-extension:为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension 来配置
3-2 Group:
Group 默认为 DEFAULT_GROUP,可以通过 spring.cloud.nacos.config.group 来配置,当配置项太多或者有重名时,可以通过分组来方便管理
3-3 NameSpace(命名空间):
NameSpace 默认为 public,可以通过 spring.cloud.nacos.config.namespace 来配置,当配置项太多或者有重名时,可以通过命名空间来方便管理