Nacos分布式配置中心

发布于:2024-09-18 ⋅ 阅读:(14) ⋅ 点赞:(0)

分布式配置的优势:

不需要重新发布我们的应用

新建父工程:【将它作为跟 所以要把父工程里面的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 的优先级更高,原因见上述

这种分布式配置的优势?

优势:

① 我们在更改配置的时候 不需要再重新发布了

② 配置变得更灵活了