分布式配置的优势:
不需要重新发布我们的应用
新建父工程:【将它作为跟 所以要把父工程里面的src删掉】
新建子模块:
新建bootstrap.properties:
在使用Nacos作为配置中心时,推荐在bootstrap.properties
中配置Nacos相关信息,
而不是在application.properties
中
原因主要涉及Spring Boot的启动过程和配置加载顺序:
1. 优先级高:
bootstrap.properties 的加载优先级高于 application.properties
即:它可以在应用启动之前就完成对 Nacos 客户端的配置,确保客户端能够尽早地建立与 Nacos 服务器的连接
2. 非 Spring 管理的配置:
bootstrap.properties
中的配置不会被 Spring 应用上下文所管理
即:即使在 Spring 应用上下文尚未完全初始化的情况下,Nacos 客户端也可以通过这些配置正常工作
总结:
application.properties 是为 Spring Boot 服务的,而 Spring Boot 底层用的就是 Spring
一定要在Spring应用启动之前 早一步从nacos那里把相关的配置拿下来
<?xml version="1.0" encoding="UTF-8"?>
<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.0</modelVersion>
<parent>
<groupId>cn.jsmart</groupId>
<artifactId>smart-root</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<!-- 父的打包方式 -->
<packaging>pom</packaging>
<modules>
<module>nacos-config</module>
</modules>
<artifactId>spring-cloud-alibaba-root</artifactId>
<groupId>com.beiyou</groupId>
<version>0.0.1-SNAPSHOT</version>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<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.0</modelVersion>
<parent>
<artifactId>spring-cloud-alibaba-root</artifactId>
<groupId>com.beiyou</groupId>
<version>0.0.1-SNAPSHOT</version>
<!-- 用来指定关系 -->
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>nacos-config</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<!-- starter-web 里面自带SpringMVC 不加这个 很多注解就引不进来-->
<artifactId>spring-boot-starter-web</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-starter-test</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
spring.application.name = order-service
spring.cloud.nacos.config.server-addr = 192.168.21.17:8848
# 命名空间的配置,若不配置 则默认为public空间 若配置了 就以配置为准
spring.cloud.nacos.config.namespace = public
# 就是 nacos 里的DataId, 如果不配置 就默认使用的是 spring.application.name 的值
spring.cloud.nacos.config.name = order-service
# 配置文件的格式 ,值是properties 则可以省略 若是其他格式 则必须配置
spring.cloud.nacos.config.file-extension = properties
# 配置组 默认是DEFAULT_GROUP
spring.cloud.nacos.config.group = DEFAULT_GROUP
package com.beiyou.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@Value("${example.first}")
private String first;
@GetMapping("/test")
public String test(){
return this.first;
}
}
在nacos中 通过哪个注解 可以实现自动更新?
【idea启动后请求得到结果1,在nacos中 将结果1修改为结果2 重新发布 ,在idea中 直接请求就能拿到结果2,所以不用再次启动idea了,但若是在配置里 新加配置内容 还是需要重新启动idea的】
通过注解@RefreshScope,即:所谓的热更新
版本迭代的时候 用组(即:可以在同一项目下 有不同的版本号),
但基本上 我们在开发的时候 用的还是DEFAULT_GROUP
.Nacos 与 application.properties 同时配置了同一个key? 谁的优先级高?为什么?
bootstrap.properties 的优先级更高,原因见上述
这种分布式配置的优势?
优势:
① 我们在更改配置的时候 不需要再重新发布了
② 配置变得更灵活了