写在前面
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:
server-addr: localhost:8848
file-extension: yaml
prefix: older-service
group: cloud-demo
discovery:
server-addr: localhost:8848
cluster-name: HZ
group: cloud-demo
---
spring:
profiles: dev
cloud:
nacos:
config:
namespace: 685f6872-f0d1-44b1-bc07-1422f16ffa3a
discovery:
namespace: 685f6872-f0d1-44b1-bc07-1422f16ffa3a
---
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;
@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:
server-addr: localhost:8848
file-extension: yaml
prefix: older-service
group: cloud-demo
shared-configs:
- dataId: public.yaml
group: cloud-demo
discovery:
server-addr: localhost:8848
cluster-name: HZ
group: cloud-demo
---
spring:
profiles: dev
cloud:
nacos:
config:
namespace: 685f6872-f0d1-44b1-bc07-1422f16ffa3a
shared-configs:
- dataId:
discovery:
namespace: 685f6872-f0d1-44b1-bc07-1422f16ffa3a
---
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:
server-addr: localhost:8848
file-extension: yaml
prefix: older-service
group: cloud-demo
extension-configs:
- dataId: public.yaml
group: cloud-demo
discovery:
server-addr: localhost:8848
cluster-name: HZ
group: cloud-demo
---
spring:
profiles: dev
cloud:
nacos:
config:
namespace: 685f6872-f0d1-44b1-bc07-1422f16ffa3a
shared-configs:
- dataId:
discovery:
namespace: 685f6872-f0d1-44b1-bc07-1422f16ffa3a
---
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
优先级如下
|