分布式配置简介
Nacos提供了用于存储配置和其他元数据的key/value存储,为分布式系统中的外部化配置提供服务器端和客户端的支持。使用Spring Cloud Alibaba Nacos Config,可以在Nacos Server集中管理Spring Cloud 应用的外部属性配置
Spring Cloud Alibaba Nacos Config是Config Server 和 Client的替代方案,客户端和服务器上的概念与Spring Environment和PropertySource有一致的抽象,在特殊的bootstrap阶段,配置被加载到Spring环境中,当应用程序通过部署管道从开发到测试再到生产时,可以管理这些环境之间的配置,并确保应用程序具有迁移时需要运行的所有内容。
引入 Nacos Config支持分布式配置
创建一个父项目
父项目中需要的依赖有
<!-- Alibaba官方给出的兼容版本:
spring-cloud:Hoxton.SR3
spring-boot:2.2.5.RELEASE
Spring-Cloud-Alibaba:2.2.1.RELEASE
-->
<!-- Spring-Boot-Dependencies-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Spring-Cloud-Dependencies-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Spring-Cloud-Alibaba-Dependencies-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
创建服务提供者:producer
其中需要的依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
启动Nacos服务器,查看控制台
完成之后点击右下角的发布按钮,将配置发布
在resources下创建yml文件,并写入配置
# 设置服务端口
server:
port: 8001
# 设置服务名
spring:
application:
name: springcloudalibaba-producer
cloud:
nacos:
discovery:
server-addr: 192.168.214.184:8848
config:
# 指定配置中心的ip和端口
server-addr: 192.168.214.184:8848
# 指定文件分组
group: DEFAULT_GROUP
# 指定文件类型
file-extension: yaml
创建服务启动类,并启动
创建控制器并测试获取配置中的name
# @RestController=@Response+@Controller
@RestController
# Nacos配置监听,Bean动态刷新
@RefreshScope
public class NacosController {
# 获取到user.name
@Value("${user.name}")
private String userName;
@RequestMapping("/getName")
public String getUserName(){
return userName;
}
}
启动,并在浏览器中输入 localhost:8001/getName 查看返回
不同环境的配置
在Nacos控制台创建不同环境的配置文件,也可以直接克隆,然后改Data ID和配置内容
开发环境:XXXXXXXX-dev.yaml
测试环境:XXXXXXXX-qa.yaml
生产环境:XXXXXXXX-pro.yaml
点击开始克隆就可以克隆了
克隆完成之后修改不同环境下的配置
修改完成之后点击发布,并确定修改
修改resources下的yml文件,可以指定运行环境
再次启动运行,并请求getName接口
Bean的动态刷新及监听
需要在类上声明@RefreshScope注解
这样,如果Nacos控制台中的配置被修改了,在IDEA控制台就直接可以看到,这也就是Nacos外部配置的好处,以往如果修改配置文件,需要在本地修改,然后再打包上传到服务器,现在只需要在Nacos控制台修改,可以实现配置的动态刷新,可以看一下效果:
在类上声明@RefreshScope注解
将开发环境的外部配置修改
发布之后我们不需要重启服务,我们直接请求getName接口
IDEA控制台可以看出IDEA监听了配置的修改
这样就实现了配置的动态刷新