我们在之前提到过,Nacos不仅仅可以用于服务注册中心,还可用于配置中心,类似于SpringCloud的Config,咱们这篇文章来实现一些Nacos的配置中心
一、创建Config项目
创建一个新的SpringBoot项目,名称为config_nacos
配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<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>
<groupId>com.example</groupId>
<artifactId>config_nacos</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>config_nacos</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
这里,我们引入了spring-cloud-starter-alibaba-nacos-config这个依赖
新建一个读取配置的controller
package com.example.config.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;
/**
* @author MrWang
* @version v1.0
* @date 2019-04-25
* @Description
*/
@RestController
@RefreshScope
public class ConfigController {
@Value("${nacos.config}")
private String config;
@RequestMapping("/read")
public String readConfig(){
return config;
}
}
这里有个很重要的注解@RefreshScope配置了之后,当前类配置的内容支持动态刷新
新建一个bootstrap.properties文件指定nacos地址
spring.application.name=config_nacos
server.port=8003
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
二、配置Nacos文件
打开我们的Nacos管理界面,在配置管理里点击加号
Data ID:必须和spring.application.name相同
Group:分组 不填默认DEFAULT_GROUP
配置格式:Properties
配置内容:nacos.config=127.0.0.1/hello
这个配置内容和我们之前在properties文件里配置的一样
点击发布。
三、读取配置
启动我们的项目
从这里看到,我们已经读取到了配置,那我们访问这个url看看能不能读取到。
这还没完,我们改一下Nacos的配置重新发布。
我们改为hello2
我们可以看到,我们的控制台已经输出内容了。
那我们再访问一下是不是变了
完成!
其实配置中心动态获取的流程就是每次修改后调用我们的config这个服务,让它重新去Nacos去读取新的配置文件。很好理解
下面用一张图来解释一下调用流程。
源码地址 GitHub:https://github.com/chuanzige/SpringCloud_Nacos
码云:https://gitee.com/QingJiaoWoChuanZiGe/SpringCloud_Nacos