目录
温馨提示:全套教程请查看 教程总览
前提条件
需要先下载 Nacos 并启动 Nacos server。操作步骤参见 2 - 服务注册与发现组件 —— Nacos的安装
一、简介
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 来实现应用的外部化配置,使用 group ID 为 com.alibaba.cloud
和 artifact ID 为 spring-cloud-starter-alibaba-nacos-config
的 starter。
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
二、改造Provider应用
1.Nacos添加配置
-
打开浏览器访问:
http://localhost:8848/nacos
,并打开控制台 “配置管理” 下的 “配置列表” 页面
-
点击“配置创建”按钮
-
创建新配置信息,内容如下:
其中“配置内容”为cloud- provider
服务的application.yml
配置文件中的内容,详见 3 - 服务注册与发现 —— 服务提供者 -
点击“发布”按钮发布配置
2.修改Provider应用配置
2.1 添加依赖
打开cloud-provider
应用的 pom.xml
文件,详见 3 - 服务注册与发现 —— 服务提供者 ,添加如下依赖:
<!-- Nacos配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- bootstrap配置 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
完整 pom.xml
文件如下:
<?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.ash</groupId>
<artifactId>spring-cloud-alibaba-demo</artifactId>
<version>${revision}</version>
</parent>
<artifactId>cloud-provider</artifactId>
<description>服务提供者</description>
<dependencies>
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- Nacos注册中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- Nacos配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- bootstrap配置 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 打包插件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<!-- 将源码中的xml文件打包到jar中 -->
<resources>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
</resource>
</resources>
</build>
</project>
2.2 更改配置文件
删除 resources 目录下原有的 application.yml
配置文件,新建 bootstrap.properties
配置文件
内容如下:
# 应用名称,Nacos新建配置的Data ID应该与这里的应用名称对应
spring.application.name=cloud-provider
# Nacos Srver地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
# 显示的声明Nacos中dataId文件扩展名
spring.cloud.nacos.config.file-extension=yaml
注意: Spring Boot 配置文件的加载优先级,由高到低依次为 bootstrap.properties --> bootstrap.yml --> application.properties --> application.yml
上面之所以用bootstrap.properties
配置文件,是为了优先加载配置文件,然后从nacos拉取配置,保证服务的正常启动。
2.3 添加API
- 修改Nacos配置
打开Nacos控制台,找到上面添加的cloud-provider.yaml
配置,点击“编辑”按钮
添加用于测试的配置信息,点击“发布”按钮
完整内容如下:
server:
port: 9001
spring:
application:
# 服务名称
name: cloud-provider
cloud:
nacos:
# nacos注册中心
discovery:
# 服务ip:port
server-addr: 127.0.0.1:8848
management:
endpoints:
web:
exposure:
include: '*'
# 测试配置
test:
config: nacos-config
- 添加测试API
新建ConfigController.java
提供一个API,内容如下:
package org.ash.provider.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RefreshScope//在控制器类加入@RefreshScope注解使当前类下的配置支持Nacos的动态刷新功能
public class ConfigController {
@Value("${test.config}")
private String testConfig;
@GetMapping(value = "/provider/config")
public String getConfig() {
return "服务提供者读取配置信息:" + testConfig;
}
}
注意:如果想要当前类下的配置支持Nacos动态刷新,需要添加
@RefreshScope
注解
三、运行测试
1.启动项目
启动 cloud-provider
应用,控制台输出如下则表示启动成功
注意:如果启动控制台报错,请检查 Nacos server 是否已启动
2.调用测试接口
打开浏览器调用我们之前写的测试接口 http://localhost:9001/provider/config
,成功返回消息,表示调用成功。
不停止当前 cloud-provider
应用,在Nacos控制台编辑 cloud-provider.yaml
配置,重新调用当前接口,查看返回内容是否动态刷新
可以动态刷新
NOTE:你可以通过配置 spring.cloud.nacos.config.refresh.enabled=false 来关闭动态刷新
至此,cloud-provider
应用服务配置中心改造完成!!!
温馨提示:全套教程请查看 教程总览