本文为 Spring Cloud Alibaba 系列 的第三篇文章,系列文章持续更新,点此 查看更多
前言 Nacos 除了可用于服务注册发现,还可做配置中心功能,本文将通过示例演示如何在 Spring Cloud 下使用 Nacos config 实现统一配置管理;
本示例需要先启动好 Nacos
服务,关于 Nacos
的安装与启用,请参见 Nacos 快速开始 ;
本示例完整代码 点此查看;
正文
配置 Nacos
启动 Nacos 服务,进入 配置管理 > 配置列表 > 新建配置,添加如下配置:
文章图片
Data ID:m02-nacos-config.yaml
Group:DEFAULT_GROUP
配置格式:yaml
配置内容:
server:
port: 8020
user-info:
name: Shawearn
blog-addr: https://blog.csdn.net/shawearn1027
注意此处配置的 Data ID 及 配置格式,后面在项目中的配置需要对应到。
创建项目
新建 Spring Cloud Alibaba 项目
m02-nacos-config
;添加依赖
在项目
pom.xml
中添加如下依赖:
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
2.0.2.RELEASE
spring-cloud-starter-alibaba-nacos-config
为 Nacos 配置中心依赖,其实现配置的动态变更;自定义配置类
创建配置类 UserInfo.java
package com.shawearn.spring.cloud.alibaba.configs;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.io.Serializable;
@Component
@ConfigurationProperties(prefix = "user-info")
public class UserInfo implements Serializable {private String name;
private String blogAddr;
public String getName() {
return name;
}public void setName(String name) {
this.name = name;
}public String getBlogAddr() {
return blogAddr;
}public void setBlogAddr(String blogAddr) {
this.blogAddr = blogAddr;
}
}
UserInfo 用于存放自定义配置数据,通过
@ConfigurationProperties(prefix = "user-info")
指定读取 Nacos 中配置的 user-info
下面的信息;定义测试用 Controller
UserController.java
package com.shawearn.spring.cloud.alibaba.controller;
import com.shawearn.spring.cloud.alibaba.configs.UserInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {@Autowired
private UserInfo userInfo;
@RequestMapping("/userInfo")
public UserInfo userInfo() {
return userInfo;
}
}
此处的 UserController 注入了 userInfo,并在客户端访问 /userInfo 时返回配置对象 userInfo;
添加基础配置
在项目 resources/ 目录下添加
bootstrap.yml
文件,配置如下:spring:
application:
name: m02-nacos-config
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
配置说明:
spring.application.name
项目名称;spring.cloud.nacos.config.server-addr
nacos 服务器地址;spring.cloud.nacos.config.file-extension
nacos 配置中心的配置格式,此参数值与上面 配置 Nacos 步骤中的 配置格式
相对应;spring.cloud.nacos.config.prefix
配置前缀,可不配置,不配置则默认使用 spring.application.name
的值做为前缀;此处笔者并未在
bootstrap.yml
中指定服务的启动端口,而是将端口配置到了 Nacos 中。启动项目
启动项目,观察控制台日志输出,看到如下输出:
......
2020-07-26 01:54:03.360INFO 7544 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer: Tomcat initialized with port(s): 8020 (http)
......
启用的端口为 8020,也就是笔者在 Nacos 中配置的端口了,表示项目使用了 Nacos Config 中的配置生效了。
测试配置加载
启动项目后,访问 http://localhost:8020/userInfo ,可以看到如下结果:
{
"name":"Shawearn",
"blogAddr":"https://blog.csdn.net/shawearn1027"
}
正是 Nacos 中配置的
user-info
,配置外部加载成功。测试配置修改
在 Nacos 控制台进入 配置管理 > 配置列表,修改
m02-nacos-config.yaml
配置如下:server:
port: 8020
user-info:
name: 青年老魏
blog-addr: https://blog.csdn.net/shawearn1027
可以看到项目在控制台中输入如下内容:
......
2020-07-26 02:01:29.271INFO 7544 --- [-127.0.0.1_8848] c.a.n.client.config.impl.ClientWorker: [fixed-127.0.0.1_8848] [polling-resp] config changed. dataId=m02-nacos-config.yaml, group=DEFAULT_GROUP
2020-07-26 02:01:29.271INFO 7544 --- [-127.0.0.1_8848] c.a.n.client.config.impl.ClientWorker: get changedGroupKeys:[m02-nacos-config.yaml+DEFAULT_GROUP]
2020-07-26 02:01:29.286INFO 7544 --- [-127.0.0.1_8848] c.a.n.client.config.impl.ClientWorker: [fixed-127.0.0.1_8848] [data-received] dataId=m02-nacos-config.yaml, group=DEFAULT_GROUP, tenant=null, md5=2940728bde5fbb61b3b6565c8e07b2c5, content=server:
port: 8020
user-info:
name: 青年老魏
blog-addr: https://blog.csdn.net/shawearn1027, type=yaml
......
表示当前项目感知到了 Nacos 中的配置发生了修改,再次访问 http://localhost:8020/userInfo ,结果如下:
{
"name":"青年老魏",
"blogAddr":"https://blog.csdn.net/shawearn1027"
}
可以看到配置已经被更新,至此,使用 Nacos config 实现配置管理也就基本完成了。
补充 Data ID 配置规则
在 配置 Nacos 步骤时,笔者配置了
Data ID
为 m02-nacos-config.yaml
,请注意此处的 Data ID 配置需要遵顼一定的格式,完整的 Data ID 格式如下:${prefix}-${spring.profile.active}.${file-extension}
当项目没有指定
spring.profile.active
时,Data ID 格式如下:${prefix}.${file-extension}
prefix
可以通过spring.cloud.nacos.config.prefix
指定,若不指定,会以spring.application.name
配置值作为prefix
的配置值;spring.profile.active
为当前环境对应的profile
,详情可以参考 Spring Boot文档。file-exetension
为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension
来配置。目前只支持properties
和yaml
类型。
prefix
;未指定 spring.profile.active
;指定 file-extension
= yaml,因此 Data ID = m02-nacos-config.yaml
。Group 配置
【Spring|Spring Cloud Alibaba(三)(使用 Nacos config 实现统一配置管理)】可通过
spring.cloud.nacos.config.group
指定配置使用的群组名,默认为 DEFAULT_GROUP;推荐阅读
- =======j2ee|spring用注解实现注入的@resource,@autowired,@inject区别
- jar|springboot项目打成jar包和war包,并部署(快速打包部署)
- 数据库|效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】)...
- java人生|35K 入职华为Java开发那天,我哭了(这 5 个月做的一切都值了)
- Java毕业设计项目实战篇|Java项目:在线嘿嘿网盘系统设计和实现(java+Springboot+ssm+mysql+maven)
- 微服务|微服务系列:服务发现与注册-----Eureka(面试突击!你想了解的Eureka都在这里.持续更新中......)
- 每日一书|每日一书丨终于有人把云原生讲明白了
- java|ApplicationListener和SpringApplicationRunListener的联系
- Spring|SpringSecurity--自定义登录页面、注销登录配置
- 性能|性能工具之 Jmeter 通过 SpringBoot 工程启动