在系统开发过程中,开发者通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。目的是让静态的系统工件或者交付物(如 WAR,JAR 包等)更好地和实际的物理运行环境进行适配。配置管理一般包含在系统部署的过程中,由系统管理员或者运维人员完成。系统配置的集中管理(编辑、存储、分发)、动态更新不重启、回滚配置(变更管理、历史版本管理、变更审计)等所有与配置相关的活动。
父级Pom.xml
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.3.11.RELEASEversion>
<relativePath/>
parent>
<groupId>com.cloudgroupId>
<artifactId>cloud-demoartifactId>
<version>1.0version>
<name>cloud-demoname>
<packaging>pompackaging>
<description>Demo project for Spring Bootdescription>
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
<java.version>1.8java.version>
<spring.cloud-version>Hoxton.SR5spring.cloud-version>
properties>
<modules>
<module>producermodule>
<module>consumermodule>
<module>configuremodule>
modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-dependenciesartifactId>
<version>${spring.cloud-version}version>
<type>pomtype>
<scope>importscope>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-alibaba-dependenciesartifactId>
<version>2.0.0.RELEASEversion>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starterartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
<version>2.0.4.RELEASEversion>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>fastjsonartifactId>
<version>1.2.47version>
dependency>
dependencies>
子模块pom.xml
<parent>
<groupId>com.cloudgroupId>
<artifactId>cloud-demoartifactId>
<version>1.0version>
parent>
<groupId>com.cloudgroupId>
<artifactId>configureartifactId>
<version>1.0version>
<name>configurename>
<description>Demo project for Spring Bootdescription>
<properties>
<java.version>1.8java.version>
properties>
<dependencies>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins>
build>
首先 配置管理–配置列表,点击右侧 + 新增配置。
编辑内容后点击发布:
下面来看一下bootstrap.yml配置
注意:配置中心一定要用bootstrap.yml,使用application.yml则不生效
server:
port: 8003
spring:
application:
name: configure
cloud:
nacos:
config: #创建nacos配置中心必须用bootstrap.yml或bootstrap.properties配置
server-addr: x.x.x.x:8848 #服务配置中心地址
prefix: ${spring.application.name} #配置中心对应配置文件前缀
file-extension: yml #指定配置中心中对应的配置文件的格式
然后看代码:
/**
* @Author wangy
* @create 2021/6/15 9:56
* @Description Nacos配置中心
*/
@RestController
@RequestMapping("/configure")
public class ConfigureController {
@Value("${config.name}")
private String configName;
@Value("${config.age}")
private String configAge;
/**
* 通过配置中心获取配置
* @return
*/
@GetMapping("/getConfig")
public String getConfig(){
return "通过配置中心获取到{name:"+configName+",age:"+configAge+"}";
}
}
应用启动后调用接口,发现成功读取配置:
http://127.0.0.1:8003/configure/getConfig
第二节上面编辑Nacos配置后,调用接口配置未改变,现在需要用到@RefreshScope注解
看代码:
@RestController
@RequestMapping("/configure")
@RefreshScope //加上此注解后,修改Nacos配置后,则会自动刷新配置内容
public class ConfigureController {
@Value("${config.name}")
private String configName;
@Value("${config.age}")
private String configAge;
/**
* 通过配置中心获取配置
* @return
*/
@GetMapping("/getConfig")
public String getConfig(){
return "通过配置中心获取到{name:"+configName+",age:"+configAge+"}";
}
}
后面再修改Nacos配置,重新调用接口会返回最新的配置了。
配置中心有namespace命名空间和group组的概念,看配置
server:
port: 8003
spring:
application:
name: configure
cloud:
nacos:
config: #创建nacos配置中心必须用bootstrap.yml或bootstrap.properties配置
server-addr: x.x.x.x:8848 #服务配置中心地址
prefix: ${spring.application.name} #配置中心对应配置文件前缀
file-extension: yml #指定配置中心中对应的配置文件的格式
group: CLOUD_GROUP #命名空间下的,默认DEFAULT_GROUP
namespace: cloud #命名空间ID
则需要在Nacos平台创建名称为“cloud”的命名空间。
创建完后,回到配置列表,点击cloud,重新创建配置
重新创建的配置group输入:CLOUD_GROUP
然后重新启动项目,调用接口获取配置查看效果已得到配置。
看配置:
server:
port: 8003
spring:
application:
name: configure
profiles:
active: dev #自定义环境配置
cloud:
nacos:
config: #创建nacos配置中心必须用bootstrap.yml或bootstrap.properties配置
server-addr: x.x.x.x:8848 #服务配置中心地址
prefix: ${spring.application.name} #配置中心对应配置文件前缀
file-extension: yml #指定配置中心中对应的配置文件的格式
group: CLOUD_GROUP #DEV命名空间下的DEFAULT_GROUP
namespace: cloud #命名空间ID
配置中加入了:spring.profiles.active=dev
则需要在当前 命名空间、group、下创建配置为:configure-dev.yml的配置。
重新调用接口则获取到configure-dev.yml的配置。
当前项目源码地址:
https://gitee.com/wangyue123com_admin/cloud-demo.git
分支为:Nacos-Configuration