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 Spring Cloud 中,dataId 的完整格式如下:
${prefix}-${spring.profile.active}.${file-extension}
prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
spring.profile.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 prefix.{file-extension}。
file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
<dependencies>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
dependencies>
spring:
profiles:
active: dev
spring boot中配置文件优先加载顺序:bootstrap.yml > xxx.yml > xxx.properties
bootstrap.yml 由父Spring ApplicationContext加载。
bootstrap.yml 可以理解成系统级别的一些参数配置,这些参数一般是不会变动的
pplication.yml 可以用来定义应用级别的,如果搭配 spring-cloud-config 使用 application.yml 里面定义的文件可以实现动态替换
server:
port: 9004
spring:
application:
name: config
cloud:
nacos:
discovery:
server-addr: 192.168.31.100:8848
config:
server-addr: 192.168.31.100:8848
file-extension: yaml
例如:dataId为config-dev.yaml
这里的config为spring.application.name=config
这里dev为spring.profiles.active=dev
这里yaml为spring.cloud.config.file-extension=yaml
另外,这里还有一个比较重要的注解@RefreshScope,主要用来让这个类下的配置内容支持动态刷新,也就是当我们的应用启动之后,修改了Nacos中的配置内容之后,这里也会马上生效。
@RestController
@RefreshScope
public class ConfigController {
@Value("${config.info}")
private String info;
@GetMapping("/config/info")
public String info(){
return info;
}
}
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigApplication {
public static void main(String[] args) {
SpringApplication.run(NacosConfigApplication.class, args);
}
}
默认情况
Namespace= public, Group= DEFAULT_GROUP,默认Cluster是DEFAULT
Namespace主要实现隔离
比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个 Namespace,不同的 Namespace之间是隔离的
Group
Group可以把不同的微服服务划分到同一个分组里面
Service
Service就是微服务;个 Servicer可以包含多个 Cluster(集群), Nacos默认 Cluster是 DEFAULT, Cluster=是对指定微服务的个虚拟划分
Instance
微服务的实例
指定spring.profile.active和配置文件的DataId来使不同环境下读取不同的数据
spring:
profiles:
active: test
server:
port: 9004
spring:
application:
name: config
cloud:
nacos:
discovery:
server-addr: 192.168.31.100:8848
config:
server-addr: 192.168.31.100:8848
file-extension: yaml
group: DEV_GROUP
server:
port: 9004
spring:
application:
name: config
cloud:
nacos:
discovery:
server-addr: 192.168.31.100:8848
config:
server-addr: 192.168.31.100:8848
file-extension: yaml
group: TEST_GROUP
namespace: 88f92e71-04fa-4c13-8892-736adb162f47