概述
Nacos提供用于存储配置和其他元数据的key/value存储,为分布式系统中的外部化配置提供服务器端和客户端支持,使用Nacos可以替换Config作为分布式配置中心。
首先配置好Nacos运行环境,不清楚的小伙伴可以访问Nacos服务在win10上安装和启动
引入依赖包
新建多模块项目,在父项目pom.xml文件中加入依赖
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.3.7.RELEASE</spring-boot.version>
<spring-cloud-alibaba.version>2.2.2.RELEASE</spring-cloud-alibaba.version>
<spring-cloud.version>Hoxton.SR9</spring-cloud.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
在父项目下新建alibaba-nacos-config子项目,引入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
yml配置文件
配置文件有bootstrap和application,这是因为在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动,在SpringBoot项目中配置文件的加载是bootstrap优先于application
spring:
application:
name: alibaba-nacos-config #应用名
cloud:
nacos:
config:
server-addr: localhost:8848 #配置中心地址
file-extension: yaml #指定文件格式
添加Nacos配置
点击“配置列表”右侧“+”号
跳转到新建页面后,填写下面信息
其中,Data ID由应用名(alibaba-nacos-config) + 文件后缀名(.yaml)组成,配置信息填写后,点击“发布”即可。
发布成功后,在配置列表会有一条配置信息,如下:
添加读取Nacos Config实现
@SpringBootApplication
public class ConfigApplication {
@Value("${user.name}")
private String userName;
@Value("${user.age}")
private int userAge;
@PostConstruct
public void init() {
System.out.printf("[init] user name:%s, age:%d%n", userName, userAge);
}
public static void main(String[] args) {
SpringApplication.run(ConfigApplication.class, args);
}
}
启动Nacos Config应用
运行启动类ConfigApplication,注意观察控制台信息
使用Nacos Config实现Bean动态刷新
Nacos Config支持标准Spring Cloud @RefreshScope特性,当配置内容变化时,Refresh Scope Beans中的绑定配置的属性将有条件的更新。此处的条件指Bean必须满足:
必须条件:Bean的声明类必须标注@RefreshScope
二选一条件:
属性(非static字段)标注@Value
@ConfigurationProperties Bean
使用Nacos Config实现Bean @Value属性动态刷新
在启动类ConfigApplication上增加@RefreshScope和@RestController使得该启动类变成Spring MVC REST控制器,同时具备动态刷新能力
@RefreshScope
@RestController
@SpringBootApplication
public class ConfigApplication {
@Value("${user.name}")
private String userName;
@Value("${user.age}")
private int userAge;
@PostConstruct
public void init() {
System.out.printf("[init] user name:%s, age:%d%n", userName, userAge);
}
@RequestMapping("/user")
public String user() {
return String.format("[HTTP] user name:%s, age:%d", userName, userAge);
}
public static void main(String[] args) {
SpringApplication.run(ConfigApplication.class, args);
}
}
重新启动ConfigApplication类,控制台输出如下信息:
浏览器输入http://localhost:8001/user
在Nacos控制台修改alibaba-nacos-config.yaml配置信息,将年龄18修改为20,点击发布后,观察应用控制台日志变化
浏览器重新访问http://localhost:8001/user
修改后的信息同步更新,同时应用控制台也输出修改后的信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/76826.html