解决:Nacos无法获取远程配置数据,导致项目启动各种配置异常
一·问题描述:
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-9004
profiles:
#激活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 来配置,当配置项太多或者有重名时,可以通过命名空间来方便管理