Nacos有注册中心和配置中心的功能,先单独介绍配置中心。
Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。
Spring Cloud Alibaba Nacos Config 是 Spring Cloud Config Server 和 Client 的替代方案,客户端和服务器上的概念与 Spring Environment 和PropertySource 有着一致的抽象,在特殊的 bootstrap 阶段,配置被加载到 Spring 环境中。当应用程序通过部署管道从开发到测试再到生产时,您可以管理这些环境之间的配置,并确保应用程序具有迁移时需要运行的所有内容。Nacos 的获取和启动方式可以参考 Nacos 官网。
问题:
Nacos Config 引入的方式同样也有两种,即 Aliyun Java Initializr 引入和Maven pom.xml 依赖。官方推荐使用 Aliyun Java Initializr 方式引入 Nacos Config,以便简化组件之间的依赖关系。
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>com.lakergroupId>
<artifactId>configartifactId>
<version>0.0.1-SNAPSHOTversion>
<name>configname>
<description>Demo project for Spring Bootdescription>
<properties>
<java.version>1.8java.version>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
<spring-boot.version>2.3.7.RELEASEspring-boot.version>
<spring-cloud-alibaba.version>2.2.2.RELEASEspring-cloud-alibaba.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starterartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
<exclusions>
<exclusion>
<groupId>org.junit.vintagegroupId>
<artifactId>junit-vintage-engineartifactId>
exclusion>
exclusions>
dependency>
dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-dependenciesartifactId>
<version>${spring-boot.version}version>
<type>pomtype>
<scope>importscope>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-alibaba-dependenciesartifactId>
<version>${spring-cloud-alibaba.version}version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<version>3.8.1version>
<configuration>
<source>1.8source>
<target>1.8target>
<encoding>UTF-8encoding>
configuration>
plugin>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
<version>2.3.7.RELEASEversion>
<configuration>
<mainClass>com.laker.config.ConfigApplicationmainClass>
configuration>
<executions>
<execution>
<id>repackageid>
<goals>
<goal>repackagegoal>
goals>
execution>
executions>
plugin>
plugins>
build>
project>
参考解决Nacos Server国内下载速度缓慢的问题下载启动
用户名密码默认都是:nacos
整体如下图:
仅描述如何使用,原理参考后面文章。
启动类
@SpringBootApplication
public class NacosConfigSampleApplication {
public static void main(String[] args) {
SpringApplication.run(NacosConfigSampleApplication.class, args
);
}
}
配置类
@RestController
@RequestMapping("/config")
public class ConfigController {
@Value("${laker.name}")
private String lakerName;
@RequestMapping("/get")
public String get() {
return lakerName;
}
}
验证
浏览器访问:http://ip:port/config/get
.
Nacos Confg 支持标准 Spring Cloud @ RefreshScope
特性,即应用订阅某个Nacos 配置后,当配置内容变化时,Refresh Scope Beans 中的绑定配置的属性将有条件的更新。所谓的条件是指 Bean 必须:
RefreshScope
Value
ConfigurationProperties
Bean 除此之外,Nacos Confg 也引入了 Nacos Client 底层数据变化监听接口,
即 com.alibaba.nacos.api.config.listener.Listener。下面的内容将分别讨论这三种不同
的使用场景。
Nacos Client:Nacos 客户端 API,也是 Nacos Config 底层依赖
@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {
@Value("${laker.name}")
private String lakerName;
@RequestMapping("/get")
public String get() {
return lakerName;
}
@PostConstruct
public void init() {
System.out.printf("---[init]--- laker name : %s ", lakerName);
}
}
@RefreshScope
@ConfigurationProperties(prefix = "laker")
public class User {
private String name;
private int age;
}
启动类
@EnableConfigurationProperties(User.class)
@SpringBootApplication
public class NacosConfigSampleApplication {
public static void main(String[] args) {
SpringApplication.run(NacosConfigSampleApplication.class, args
);
}
}
前文曾提及 com.alibaba.nacos.api.config.listener.Listener 是 Nacos ClientAPI 标准的配置监听器接口,由于仅监听配置内容,并不能直接与 Spring 体系打通,因此,需要借助于 Spring Cloud Alibaba Nacos Config API NacosConfigManager
@SpringBootApplication
public class NacosConfigSampleApplication {
@Autowired
private NacosConfigManager nacosConfigManager;
public static void main(String[] args) {
SpringApplication.run(NacosConfigSampleApplication.class, args
);
}
@Bean
public ApplicationRunner runner() {
return args -> {
String dataId = "laker-dev.yaml";
String group = "DEFAULT_GROUP";
nacosConfigManager.getConfigService().addListener(dataId, group, new
AbstractListener() {
@Override
public void receiveConfigInfo(String configInfo) {
System.out.println("[Listener] " + configInfo);
}
});
};
}
}
[Listener] laker:
name: laker1222222
参考:
关注我的公众号【Java大厂面试官】,回复:100 即可下载
本系列目录