写在前面
nacos中提供了配置管理功能,能有效的让我在开发中对项目的配置文件进行管理,如我们在开发中测试环境、开发环境经常会分开,我们总不至于每次打不同环境的包时,改不同环境的配置文件。
1.配置管理
nacos的配置管理同样提供环境隔离功能、所以我们可以在配置管理中可以建立不同的namespace来管理部同环境的配置文件。
1.1配置管理添加
2.多环境配置
2.1在SpringCloud中的多环境配置
我们知道SpringBoot可以通过文件名来区分配置,如下:
- application.yml
- application-dev.yml #开发环境
- application-test.yml #测试环境
- application-prod.yml #正式环境
但是与SpringBoot不同的是SpringCloud提供了另一种方式bootstrap.yml,bootstrap.yml
用来程序引导时执行,应用于更加早期配置信息读取,也就是说bootstrap.yml会在application.yml之前被加载,同时bootstrap.yml最经典的应用方式也是在nacos中。
2.2 引入
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2.3 bootstrap.yml配置
spring:
application:
name: older-service
profiles:
active: dev
cloud:
nacos:
config:
#nacos配置管理地址
server-addr: localhost:8848
#配置文件后缀名
file-extension: yaml
#配置文件前缀名不写默认为application.name
prefix: older-service
#分组
group: cloud-demo
discovery:
#nacos服务管理地址
server-addr: localhost:8848
#集群
cluster-name: HZ
#分组
group: cloud-demo
---
#dev环境
spring:
profiles: dev
cloud:
nacos:
config:
#配置管理命名空间
namespace: 685f6872-f0d1-44b1-bc07-1422f16ffa3a
discovery:
#服务管理命名空间
namespace: 685f6872-f0d1-44b1-bc07-1422f16ffa3a
---
#uat环境
spring:
profiles: uat
cloud:
nacos:
config:
#配置管理命名空间
namespace: 883573b2-678e-48a5-a56f-89835a5a8657
discovery:
#服务管理命名空间
namespace: 883573b2-678e-48a5-a56f-89835a5a8657
3.配置热更新
注意nacos中[spring.application.name].yaml以及[spring.application.name]-[spring.profiles.active].yaml支持热更新,共享配置以及扩展配置不支持热更新
3.1 @RefreshScope与@Value(不建议)
在@Value注入的变量所在类上添加注解@RefreshScope
3.2 @ConfigurationProperties(建议)
package cn.itcast.order.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @Description
* @Author weiwenbin
* @Date 2022/8/15 下午4:09
*/
@ConfigurationProperties(prefix = "wwb")
@Component
@Data
public class MyProperties {
private String test;
}
4.多服务配置共享
4.1nacos中扩展配置与共享配置
日常开发中,多个模块可能会有很多共用的配置,比如数据库连接信息,Redis 连接信息,RabbitMQ
连接信息,监控配置等等。那么此时,我们就希望可以加载多个配置,多个项目共享同一个配置之类等功能,Nacos Config 也确实支持。Nacos在配置路径spring.cloud.nacos.config.extension-config下,允许我们指定⼀个或多个额外配置。
Nacos在配置路径spring.cloud.nacos.config.shared-configs下,允许我们指定⼀个或多个共享配置。
上述两类配置都⽀持三个属性:data-id、group(默认为字符串DEFAULT_GROUP)、refresh(默认为true)。
4.1.1spring.cloud.nacos.config.shared-configs(建议)
spring:
application:
name: older-service
profiles:
active: dev
cloud:
nacos:
config:
#nacos配置管理地址
server-addr: localhost:8848
#配置文件后缀名
file-extension: yaml
#配置文件前缀名不写默认为application.name
prefix: older-service
#分组
group: cloud-demo
#共享文件配置
shared-configs:
- dataId: public.yaml
group: cloud-demo
discovery:
#nacos服务管理地址
server-addr: localhost:8848
#集群
cluster-name: HZ
#分组
group: cloud-demo
---
#dev环境
spring:
profiles: dev
cloud:
nacos:
config:
#配置管理命名空间
namespace: 685f6872-f0d1-44b1-bc07-1422f16ffa3a
shared-configs:
- dataId:
discovery:
#服务管理命名空间
namespace: 685f6872-f0d1-44b1-bc07-1422f16ffa3a
---
#uat环境
spring:
profiles: uat
cloud:
nacos:
config:
#配置管理命名空间
namespace: 883573b2-678e-48a5-a56f-89835a5a8657
discovery:
#服务管理命名空间
namespace: 883573b2-678e-48a5-a56f-89835a5a8657
4.1.2spring.cloud.nacos.config.extension-configs(不建议)
spring:
application:
name: older-service
profiles:
active: dev
cloud:
nacos:
config:
#nacos配置管理地址
server-addr: localhost:8848
#配置文件后缀名
file-extension: yaml
#配置文件前缀名不写默认为application.name
prefix: older-service
#分组
group: cloud-demo
#共享文件配置
extension-configs:
- dataId: public.yaml
group: cloud-demo
discovery:
#nacos服务管理地址
server-addr: localhost:8848
#集群
cluster-name: HZ
#分组
group: cloud-demo
---
#dev环境
spring:
profiles: dev
cloud:
nacos:
config:
#配置管理命名空间
namespace: 685f6872-f0d1-44b1-bc07-1422f16ffa3a
shared-configs:
- dataId:
discovery:
#服务管理命名空间
namespace: 685f6872-f0d1-44b1-bc07-1422f16ffa3a
---
#uat环境
spring:
profiles: uat
cloud:
nacos:
config:
#配置管理命名空间
namespace: 883573b2-678e-48a5-a56f-89835a5a8657
discovery:
#服务管理命名空间
namespace: 883573b2-678e-48a5-a56f-89835a5a8657
4.2nacos中配置文件加载顺序以及优先级
顺序如下
- bootstrap.yml
- application.yaml
- application-[spring.profiles.active].yaml
- share-config.yaml
- extension-config.yaml
- [spring.application.name].yaml
- [spring.application.name]-[spring.profiles.active].yaml
优先级如下