SpringCloud Alibaba - Nacos Config 共享配置

在之前章节我们讲到通过SpringCloud Alibaba Nacos Config配置中心获取对应命令空间、对应分组下的配置信息,以及多环境profile环境下的配置优先级问题,虽然说profile多环境读取配置是可以读取多个的配置文件内容,不过也是局限于spring.application.name的参数值。

疑问:那我们该怎么读取非本项目对应的配置信息呢?比如公共配置信息、全局基本配置等。

回顾

通过本系列的前篇文章:

在之前文章中我们学习到了SpringCloud Alibaba读取Nacos Config内定义的propertiesYaml类型的配置文件信息、配置信息实时更新、Profile环境下的配置信息读取优先级、自定义namespacegroup等。

创建应用

通过Idea开发工具创建一个SpringBoot项目,在pom.xml配置文件内添加如下SpringCloudSrpingCloud Alibaba相关的版本依赖:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
//...
<description>
SpringCloud Alibaba Nacos Config 共享配置
</description>

<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
<spring-cloud-alibaba.version>0.2.1.RELEASE</spring-cloud-alibaba.version>
</properties>

<dependencies>
<!--spring cloud alibaba config-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>

<dependencyManagement>
<!--SpringCloud-->
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--SpringCloud Alibaba-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
//...

本章的依赖与之前章节一致,本章内容仍然是Nacos Config配置中心相关的知识点。

bootstrap.yml

Nacos Config所需相关的参数配置在引导配置文件bootstrap.yml内,自行在resources资源文件下创建,内容如下所示:

1
2
3
4
5
6
7
8
9
10
spring:
application:
name: hengboy-sca-nacos-config-share
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
# 共享的配置列表
shared-dataids: hengboy-common.yaml,hengboy-service.yaml
file-extension: yaml

创建配置

1. 创建:hengboy-sca-nacos-config-share.yaml配置

这是本章基本的配置文件,对应spring.application.name参数值自动绑定读取。

2. 创建:hengboy-common.yaml配置

这是共享配置其中一个配置文件,我们暂定存放一些公共的配置信息。

3. 创建:hengboy-service.yaml配置

这是共享配置的另外一个配置文件,我们暂定存放一些服务相关的配置信息。

共享配置读取

创建名为ShareConfigController控制器,添加如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//...
@RestController
@RefreshScope
@RequestMapping(value = "/config")
public class ShareConfigController {

/**
* hengboy-sca-nacos-config-share.yaml配置内容
*/
@Value(value = "${share.basic:}")
private String basic;
/**
* hengboy-common.yaml配置内容
*/
@Value(value = "${common.version:}")
private String commonVersion;
/**
* hengboy-service.yaml配置内容
*/
@Value(value = "${service.order:}")
private int serviceOrder;

/**
* 输出配置信息
*/
@GetMapping(value = "/get")
public void getConfig() {
logger.info("基础配置:{}", basic);
logger.info("公共配置:{}", commonVersion);
logger.info("服务配置:{}", serviceOrder);
}
}

我们分别创建basiccommonVersionserviceOrder全局字段通过@Value注解进行读取不同的配置内容,当我们访问/config/get地址时就会在控制台输出响应的配置信息,如果对@RefreshScope注解有疑问的同学可以去看SpringCloud Alibaba - Nacos 作为配置中心 & 读取Properties配置信息#自动更新配置

运行测试
启动应用程序,通过终端命令:curl http://localhost:8080/config/get可以在应用程序控制台查看当前的配置信息,如下:

1
2
3
2019-03-06 16:18:00.895  INFO 24162 --- [nio-8080-exec-1] c.y.c.s.a.n.c.s.ShareConfigController    : 基础配置:basic-info
2019-03-06 16:18:00.895 INFO 24162 --- [nio-8080-exec-1] c.y.c.s.a.n.c.s.ShareConfigController : 公共配置:0.2.1.RELEASE
2019-03-06 16:18:00.895 INFO 24162 --- [nio-8080-exec-1] c.y.c.s.a.n.c.s.ShareConfigController : 服务配置:12

虽然我们配置了@RefreshScope来刷新全局@Value注解字段的值,但是我们需要在bootstrap.yml配置文件内标注具体有哪些共享配置需要刷新?

共享配置刷新

共享配置的刷新很简单,我们只需要添加spring.cloud.nacos.config.refreshable-dataids参数就可以了,修改后的bootstrap.yml如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
spring:
application:
name: hengboy-sca-nacos-config-share
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
# 共享的配置列表
shared-dataids: hengboy-common.yaml,hengboy-service.yaml
# 需要刷新的配置列表
refreshable-dataids: hengboy-common.yaml,hengboy-service.yaml
file-extension: yaml

shared-dataids配置一致,多个使用英文半角,隔开,这里可以指定配置仅刷新共享配置内的一个多个全部等,SpringCloud Alibaba Nacos Config会自动根据配置的配置文件名称来进行开启刷新监听。

注意:无论shared-dataids还是refreshable-dataids都需要将配置文件的格式加上,如:.yaml.properties等。

共享配置缺陷之处

shared-dataids的配置方式存在一定的使用局限性,使用扩展性不强,如果我们的hengboy-common.yaml配置文件在另外一个分组中,通过shared-dataids方式就无法实现读取。
另外虽然refreshable-dataids可以配置刷新的配置文件,不过也是需要删减配置,如果需要再次开启刷新,则还得追加到refreshable-dataids参数。

下篇我们会讲到《自定义共享配置》相关的内容。

代码示例

本章代码在源码的名称为:spring-cloud-alibaba-nacos-config-share,在SpringCloud-Alibaba/Nacos-Config目录下。

  • MicroJob
    micro-job是一款分布式任务调度执行框架,用于集群环境负载均衡条件下的任务分发以及任务消费
    任务消费者节点定义任务 & 任务自动上报
    任务调度器自动根据负载均衡策略来选择不同的消费者节点进行任务消费

    点击查看MicroJob官方文档

下面的内容你感兴趣吗?

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×