概述

多个微服务的配置之间有可能存在重复,重复的部分称为公共配置,我们可以把这些公共配置存储在Nacos中,各个微服务根据自己的需求加载对应的配置

这样做的好处是:方便管理,只需要修改公共配置即可实现修改多个服务的配置

实现过程

前提

加载的配置文件必须在同一个命名空间内

添加配置

我在命名为dev的命名空间内创建了三个配置文件:mysql_dev.propertiesserver_dev.propertiesnacos_config.properties,内容如下:

image-20220320205354950

mysql_dev.properties

1
2
3
4
5
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/db_secondhandtrade?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456

server_dev.properties

1
2
3
server.port=8888
server.servlet.context-path=/
server.tomcat.uri-encoding=UTF-8

nacos_config.properties

1
2
ledao.name=mary
ledao.age=22

bootstrap.properties加载

bootstrap比application配置文件的优先级高,如果存在一样的配置,以bootstrap的为准,加载多配置使用数组的形式,项目的配置文件只需要配置Nacos的IP地址和端口号命名空间id,其它的配置从Nacos中加载

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
#应用名称,可省略
spring.application.name=nacos_config_test
#Nacos的IP地址和端口号
spring.cloud.nacos.config.server-addr=121.41.211.106:8848
#Nacos配置文件所在命名空间id
spring.cloud.nacos.config.namespace=e4f40c45-6d6d-44dc-8bea-645f5d727824
#Nacos配置文件所在组名
#spring.cloud.nacos.config.group=DEFAULT_GROUP
#要读取的配置文件名称
#spring.cloud.nacos.config.name=nacos_config.properties

#加载mysql_dev.properties的配置
spring.cloud.nacos.config.extension-configs[0].dataId=mysql_dev.properties
spring.cloud.nacos.config.extension-configs[0].group=DEFAULT_GROUP
spring.cloud.nacos.config.extension-configs[0].refresh=true

#加载server_dev.properties的配置
spring.cloud.nacos.config.extension-configs[1].dataId=server_dev.properties
spring.cloud.nacos.config.extension-configs[1].group=DEFAULT_GROUP
spring.cloud.nacos.config.extension-configs[1].refresh=true

#加载nacos_config.properties的配置
spring.cloud.nacos.config.extension-configs[2].dataId=nacos_config.properties
spring.cloud.nacos.config.extension-configs[2].group=DEFAULT_GROUP
spring.cloud.nacos.config.extension-configs[2].refresh=true

控制层

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
package com.ledao.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.sql.DataSource;

/**
* @author LeDao
* @company
* @create 2022-03-19 10:45
*/
@RefreshScope
@RestController
@RequestMapping("/nacos")
public class NacosConfigController {

@Value("${ledao.name}")
private String name;

@Value("${ledao.age}")
private String age;

@Resource
private DataSource dataSource;

@GetMapping("/getUserInfo")
public String getUserInfo() throws Exception {
return name + " : " + age + " , " + dataSource.getConnection();
}
}

测试

浏览器地址栏输入:http://localhost:8888/nacos/getUserInfo ,看到下图说明已经成功加载三个配置文件

image-20220320211748947