SpringCloud Alibaba Nacos作为配置中心(六)(2)--------自定义扩展的 Data Id 配置 结合 配置不同环境
2019-02-19 15:00
2586 查看
前面分别介绍了
SpringCloud Alibaba Nacos作为配置中心(四)-----------不同环境下切换配置文件实现开发、测试、生产等不同环境下配置文件切换
SpringCloud Alibaba Nacos作为配置中心(六)(1)--------自定义扩展的 Data Id 配置实现一个工程,多个配置文件的组合
通过这两者相结合,可以实现配置文件更加灵活的组合。在如下场景中:
一个项目通常由多个微服务构成,
- 一些配置是各个微服务公用的配置,即全局配置:例如,数据库配置,数据库连接池配置,redis缓存配置,日志配置、分页方式配置等。此外,这些公用配置又根据不同环境下是否配置不同,分为恒定全局配置(日志配置、分页方式配置)、以及根据不同环境而变化的全局配置(数据库配置、redis缓存配置)
- 一些配置是每个微服务特有的配置,即局部配置:例如某些自定义属性值等。同样,根据在不同环境下,是否发生变化,也可以再分成了两类。
下面以一个实例介绍一下
假设有两种环境:开发环境dev、测试环境test;
配置有:
- 全局可变配置:redis配置
- 全局不念配置:日志配置
- 本地可变配置:
- 本地不变配置:
1、在Nacos Server创建相关配置文件:
配置文件中的内容依次如下:
- nacos-config-client1-dev.properties LOCAL_GROUP
[code]local.config=dev-local-config
- nacos-config-client1.properties LOCAL_GROUP
-
[code]local.config.invariable=invariable-local-config
- nacos-config-client1-test.properties LOCAL_GROUP
[code]local.config=test-local-config
- globalVariable-dev.properties GLOBAL_GROUP
[code]redis.config=dev-redis-config
- globalVariable-test.properties GLOBAL_GROUP
[code]redis.config=test-redis-config
- globalInvariable.properties GLOBAL_GROUP
[code]log.file=log-config
2、创建客户端工程:
工程目录如下:
pom文件如下:
[code]<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文件如下:
[code]################################################################################################### # 应用名,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进行测试:
[code]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工程打包,通过命令行启动:先采用测试环境:
[code]java -jar nacos-client3-0.0.1-SNAPSHOT.jar --spring.profiles.active=test
可以看到打印的值日中有如下记录:
[code]c.t.consumer.NacosClient3Application : The following profiles are active: test
-
结果如下图所示:
-
- 再采用dev环境
-
[code]java -jar nacos-client3-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev
同理启动日志出现类似如下记录:
[code]c.t.consumer.NacosClient3Application : The following profiles are active: dev
缺点:
这样配置存在缺陷,启动的速度会变慢
相关文章推荐
- Spring Cloud Alibaba基础教程:使用Nacos作为配置中心
- Spring Cloud Alibaba基础教程:Nacos配置的多环境管理
- spring使用PropertyPlaceholderConfigurer扩展来满足不同环境的参数配置
- 配置环境spring使用PropertyPlaceholderConfigurer扩展来满足不同环境的参数配置
- Spring Cloud Alibaba基础教程:Nacos配置的多文件加载与共享配置
- spring使用PropertyPlaceholderConfigurer扩展来满足不同环境的参数配置
- spring cloud config server使用svn来作为外部配置中心
- spring使用PropertyPlaceholderConfigurer扩展来满足不同环境的参数配置
- spring使用PropertyPlaceholderConfigurer扩展来满足不同环境的参数配置
- spring使用PropertyPlaceholderConfigurer扩展来满足不同环境的参数配置
- SpringCloud Alibaba-nacos注册中心
- springcloud使用consul作为配置中心
- Spring-Data-Redis-Repository中以自定义class作为id的实现
- spring使用PropertyPlaceholderConfigurer扩展来满足不同环境的参数配置
- spring使用PropertyPlaceholderConfigurer扩展来满足不同环境的参数配置
- spring cloud使用zookeeper作为服务注册中心和配置中心
- Spring PropertyPlaceholderConfigurer 自定义扩展来解决多环境配置加载的问题
- Spring Cloud Gateway 结合配置中心限流
- Spring Cloud Alibaba基础教程:Nacos配置的加载规则详解
- 利用Spring Cloud Config结合Bus实现分布式配置中心的步骤