前面分别介绍了
SpringCloud Alibaba Nacos作为配置中心(四)-----------不同环境下切换配置文件实现开发、测试、生产等不同环境下配置文件切换
SpringCloud Alibaba Nacos作为配置中心(六)(1)--------自定义扩展的 Data Id 配置实现一个工程,多个配置文件的组合
通过这两者相结合,可以实现配置文件更加灵活的组合。在如下场景中:
一个项目通常由多个微服务构成,
- 一些配置是各个微服务公用的配置,即全局配置:例如,数据库配置,数据库连接池配置,redis缓存配置,日志配置、分页方式配置等。此外,这些公用配置又根据不同环境下是否配置不同,分为恒定全局配置(日志配置、分页方式配置)、以及根据不同环境而变化的全局配置(数据库配置、redis缓存配置)
- 一些配置是每个微服务特有的配置,即局部配置:例如某些自定义属性值等。同样,根据在不同环境下,是否发生变化,也可以再分成了两类。

下面以一个实例介绍一下
假设有两种环境:开发环境dev、测试环境test;
配置有:
- 全局可变配置:redis配置
- 全局不念配置:日志配置
- 本地可变配置:
- 本地不变配置:
1、在Nacos Server创建相关配置文件:

配置文件中的内容依次如下:
- nacos-config-client1-dev.properties LOCAL_GROUP
local.config=dev-local-config
- nacos-config-client1.properties LOCAL_GROUP
local.config.invariable=invariable-local-config- nacos-config-client1-test.properties LOCAL_GROUP
local.config=test-local-config - globalVariable-dev.properties GLOBAL_GROUP
redis.config=dev-redis-config - globalVariable-test.properties GLOBAL_GROUP
redis.config=test-redis-config - globalInvariable.properties GLOBAL_GROUP
log.file=log-config
2、创建客户端工程:
工程目录如下:

pom文件如下:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>0.2.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>bootstrap.properties文件如下:
###################################################################################################
# 应用名,nacos会默认读取${spring.application.name}.properties
spring.application.name=nacos-config-client1
###################################################################################################
# Nacos 基础相关配置
# nacos服务器地址配置
spring.cloud.nacos.config.server-addr=172.16.10.40:8848,172.16.10.166:8848
# 配置文件格式配置,默认properties
spring.cloud.nacos.config.file-extension=properties
# 设置默认组,默认值DEFAULT_GROUP
spring.cloud.nacos.config.group=LOCAL_GROUP
# 根据nacos server生成的命名空间ID进行修改
spring.cloud.nacos.config.namespace=5dfbf2d6-e629-46a2-86f8-07402a57e1f2
# 设置不同环境下的配置文件后缀
spring.profiles.active=dev
active.suffix=-${spring.profiles.active}
###################################################################################################
# Nacos 扩展配置
# 1、Data Id 全局恒定配置(日志配置)
spring.cloud.nacos.config.ext-config[0].data-id=globalInvariable.properties
spring.cloud.nacos.config.ext-config[0].group=GLOBAL_GROUP
spring.cloud.nacos.config.ext-config[0].refresh=true
# 2、Data Id 全局非恒定配置(redis配置)
spring.cloud.nacos.config.ext-config[1].data-id=globalVariable${active.suffix}.properties
spring.cloud.nacos.config.ext-config[1].group=GLOBAL_GROUP
spring.cloud.nacos.config.ext-config[1].refresh=true
###################################################################################################创建controller进行测试:
package com.tianyuan.consumer.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RefreshScope
@RestController
public class TestController {
@Value("${log.file}")
private String logConfig;
@Value("${redis.config}")
private String redisConfig;
@Value("${local.config}")
private String localConfig;
@Value("${local.config.invariable}")
private String localConfigInvariable;
@RequestMapping("/test")
public String test() {
return "logConfig:" + logConfig + " / " + "redisConfig:" + redisConfig + " / " + "localConfig:" + localConfig
+ " / " + "localConfigInvariable" + localConfigInvariable;
}
}
代码可以从这里下载:https://github.com/xujingle1995/Learn-SpringCloudAlibaba
3.测试:
- 将springboot工程打包,通过命令行启动:先采用测试环境:
java -jar nacos-client3-0.0.1-SNAPSHOT.jar --spring.profiles.active=test可以看到打印的值日中有如下记录:
c.t.consumer.NacosClient3Application : The following profiles are active: test 结果如下图所示:

- 再采用dev环境
java -jar nacos-client3-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev同理启动日志出现类似如下记录:
c.t.consumer.NacosClient3Application : The following profiles are active: dev
缺点:
这样配置存在缺陷,启动的速度会变慢
版权声明:本文为qq_26932225原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。