文章目录
Nacos 配置注意事项
由于 spring boot 2.4
开始,官方做了优化,可以通过spring.config.import=xxx.properties
的方式引入配置.
并且spring-cloud官方从 SpringCloud 2020.x
以上的版本去掉了spring-cloud-starter-bootstrap
依赖(以前是内置的),如果需要读取bootstrap.properties
或者bootstrap.yml
配置文件则需要手动引入。
同时
spring-cloud-alibaba
为跟spring-cloud官方保持一致,从2021.0.1.0
版本开始,默认使用spring.config.import
方式引入额外的配置,如果您想继续使用bootstrap
方式加载配置,需要手动引入。
Nacos 配置读取方式
方式一,非bootstrap
方式读取Nacos配置:
可以通过在 application.properties
或者 application.yml
配置文件中,添加spring.config.import=nacos:xxx.yml
指定读取 nacos 配置
spring:
application:
name: xxx-gateway
config:
import:
- nacos:application-dev.yml
- nacos:nacos-config.properties # 这里填额外读取Nacos的配置名
# _________分割线_________等同于_____↓
spring:
application:
name: xxx-gateway
cloud:
nacos:
config:
extension-configs: # 这里填额外读取Nacos的配置名
- dataId: nacos-config.properties
# group: ${spring.cloud.nacos.config.group}
# refresh: true
非
bootstrap
方式读取配置方式虽然读取速度更快,但有局限性。 就是只能读取spring.config.import
指定的配置,并且只能动态变更本地没有配置的属性。什么意思?
假设有一个自定义变量名user.info
分别定义放在本项目application.yml
或者application-dev.yml
下面,同时在Nacos正确的命名空间配置下放入application-dev.yml
或者nacos-config.properties
里面,当你变更Nacos上面的user.info
信息,你会发现控制台打印的nacos变更还是空的,还是取的本项目的信息。
user:
info: 取到 application-${spring.profiles.active}.yml的值
age: 20
这种配置方式,意味着,你本地如果配置了默认值,想nacos动态刷新是不行的,只能动态刷新非本地配置的值,不够人性化,
如果我既想读取 本地的配置,同时又想nacos动态变更。则推荐使用
bootstrap.properties
的方式。
方式二: 通过 bootstrap.properties
方式读取Nacos配置中心
从 Nacos 与 Spring cloud 版本对照表 找到你对应的版本
首先可以在项目根pom.xml
文件中加入以下依赖:
<properties>
<spring-cloud.version>2021.0.5</spring-cloud.version>
<spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version>
</properties>
<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>
<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>
<!-- SpringCloud 2020.x 以上的版本 官方去掉了bootstrap依赖,需要手动引入,否则启动报错-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
这种方式的好处就是:配置可控