nacos-config配置中心、多环境配置、加载多配置文件
一、前言
在分布式系统中,由于服务数量巨多,为了方便服务 配置文件统一管理,实时更新,所以需要分布式配置中心组件。
Spring Cloud Alibaba Nacos Config 是 Spring Cloud Config 的替代方案。
二、maven引入相关包
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.3.RELEASE</version>
</dependency>
三、配置文件
1.bootstrap.yml配置文件如下:
spring:
application:
name: provider-user
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
group: DEFAULT_GROUP
file-extension: yaml
enabled: true
refresh-enabled: true
2.在 Nacos Spring Cloud 中,dataId 的完整格式如下:
${prefix}-${spring.profile.active}.${file-extension}
(1)prefix:
- 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
(2)spring.profile.active:
- 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 p r e f i x . {prefix}. prefix.{file-extension}
(3)file-exetension :
- 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
四、测试
1.测试controller
@RestController
public class UserService {
@Value("${testname}")
private String testName;
@GetMapping("getTestName")
public String getTestName(){
return testName;
}
}
2.nacos新增配置文件
3.访问测试
4.实现配置自动更新
在controller添加个注解@RefreshScope即可
@RestController
@RefreshScope
public class UserService {
@Value("${testname}")
private String testName;
@GetMapping("getTestName")
public String getTestName(){
return testName;
}
}
五、多环境配置
1.通过Data ID与profile实现
(1)配置文件
在bootstrap.yml增加参数 spring.profiles.active=dev
spring:
application:
name: provider-user
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
group: DEFAULT_GROUP
file-extension: yaml
enabled: true
refresh-enabled: true
profiles:
active: dev
(2)在nacos后台增加dev配置文件
(3)测试
2.通过Group实现
(1) 配置文件
在bootstrap.yml 修改group的配置
spring:
application:
name: provider-user
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
# group: DEFAULT_GROUP
group: GROUP_DEV
file-extension: yaml
enabled: true
refresh-enabled: true
# profiles:
# active: dev
(2)在nacos后台增加dev配置文件
(3)测试
3.通过Namespace实现
(1)在nacos后台增加namespace配置文件
在命名空间界面中,新增dev,test命名空间
在配置列表界面可以切换不同的命名空间来增加配置文件
namespaceid即为dev后面的那个数值
(2) 配置文件
在bootstrap.yml 指定namespace值
spring:
application:
name: provider-user
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
# group: DEFAULT_GROUP
# group: GROUP_DEV
file-extension: yaml
enabled: true
refresh-enabled: true
namespace: 7276f4f8-c4c9-4228-9843-c5b5ba99a1d2
# profiles:
# active: dev
(3)测试
4.几种方式的比较
- 通过Data ID与profile实现
优点:这种方式与Spring Cloud Config的实现类似,命名规则类似。
缺点:这种方式在项目与环境多的时候,配置内容会显得非常混乱。配置列表中会看到各种不同应用,不同环境的配置交织在一起,非常不利于管理。
建议:项目不多时使用,或者可以结合Group对项目根据业务或者组织架构做一些拆分规划
- 通过Group实现
优点:通过Group按环境将各个应用的配置隔离。可以非常方便地利用Data ID和Group的搜索功能,分别从应用纬度和环境纬度来查看配置。
缺点:由于会占用Group纬度,所以需要对Group的使用做好规划,毕竟业务上的一些配置分组起冲突等问题。
建议:这种方式虽然结构上比上一种更好一些,但是依然可能会有一些混乱,主要是在Group的管理上要做好规划和控制。
- 通过Namespace实现(建议)
优点:官方建议的方式,通过Namespace来区分不同环境,释放了Group的自由度,这样可以让Group的使用专注于做业务层面的分组管理。同时,Nacos控制页面上对于Namespace也做了分组展示,不需要搜索,就可以隔离开不同的环境配置。非常易用。
缺点:没有啥缺点,可能就是多引入一个概念。
六、多环境配置
1、方式一
在bootstrap.yml配置文件中加入配置: spring.cloud.nacos.config.ext-config,配置信息如下:
spring:
application:
name: provider-user
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
group: DEFAULT_GROUP
file-extension: yaml
enabled: true
refresh-enabled: true
ext-config[0]:
data-id: database-dev.yaml
group: DEFAULT_GROUP
refresh: true
ext-config[1]:
data-id: database-dev2.yaml
group: DEFAULT_GROUP
refresh: true
profiles:
active: dev
nacos配置中心文件如下:
启动项目,加载配置信息如下:
ext-configs优先级,[0] <[1]
1、方式二
在bootstrap.yml配置文件中加入配置: spring.cloud.nacos.config.ext-configshared-configs,配置信息如下:
spring:
application:
name: provider-user
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
group: DEFAULT_GROUP
file-extension: yaml
enabled: true
refresh-enabled: true
shared-configs[0]:
data-id: database-dev.yaml
group: DEFAULT_GROUP
refresh: true
shared-configs[1]:
data-id: database-dev2.yaml
group: DEFAULT_GROUP
refresh: true
# ext-config[0]:
# data-id: database-dev.yaml
# group: DEFAULT_GROUP
# refresh: true
profiles:
active: dev
nacos配置文件如下:
启动,加载配置信息如下:
shared-configs优先级,[0] <[1]
更多推荐
所有评论(0)