您的位置:首页 > 编程语言 > Java开发

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

    访问http://localhost:8080/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

缺点:

这样配置存在缺陷,启动的速度会变慢
 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: