最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringCloud alibaba使用Nacos配置中心解讀

 更新時間:2026年01月17日 08:55:45   作者:沒事兒寫兩篇  
本文介紹了如何在Spring Boot項目中使用Spring Cloud Alibaba和Nacos進行依賴管理、配置管理及配置刷新,通過添加BOM和配置文件,可以簡化依賴版本的管理,并實現(xiàn)配置的動態(tài)刷新,同時,還展示了如何通過自定義DataId進行配置管理,并詳細介紹了各種配置方式的優(yōu)先級

依賴管理

Spring Cloud Alibaba BOM 包含了它所使用的所有依賴的版本

請將下面的 BOM 添加到 pom.xml 中的 部分。 這將允許我們省略任何Maven依賴項的版本,而是將版本控制委派給BOM。

<dependencyManagement>
    <dependencies>
        <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>

引用時,請注意版本對應(yīng)關(guān)系。比如我們的示例版本為:2021.0.4.0。其與Spring Boot以及Spring Cloud的版本對應(yīng)關(guān)系如下(為避免不必要的依賴沖突,請按照如下版本對應(yīng)關(guān)系驗證本文示例)

Spring Cloud Alibaba VersionSpring Cloud VersionSpring Boot Version
2021.0.4.0*Spring Cloud 2021.0.42.6.11

目前最新版本是2022.x,支持Spring Boot 3.0,我們知道Spring Boot 3.0.x需要使用java 17,針對國內(nèi)大多數(shù)應(yīng)用來說,目前還是java8,所以本文還是選用java8支持的版本。

更多的版本對應(yīng)關(guān)系請參考官網(wǎng):Spring Cloud Alibaba maven依賴版本對應(yīng)關(guān)系

完整pom依賴配置

一個完整的Spring Cloud Alibaba的pom.xml依賴如下

dependencies標(biāo)簽中的依賴根據(jù)自己實際情況引入即可。此處只是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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>CloudDemo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <build.name>CloudDemo</build.name>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>

        <spring.cloud.version>2021.0.4</spring.cloud.version>
        <spring.cloud.alibaba.version>2021.0.4.0</spring.cloud.alibaba.version>
    </properties>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.11</version>
    </parent>

    <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>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>

    <dependencies>

        <!-- 使用Nacos服務(wù)注冊與發(fā)現(xiàn) -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!-- 使用Nacos配置管理 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

        <!-- 支持讀取bootstrap配置 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- 添加web依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

    </dependencies>
</project>

添加bootstrap.properties配置

# 引用pom文件中配置的profile(注意名稱的對應(yīng))
spring.profiles.active=@profileActive@
# 應(yīng)用名稱
spring.application.name=myCloud
# Nacos配置
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
# 配置的group(默認(rèn)DEFAULT_GROUP)
spring.cloud.nacos.config.group=DEFAULT_GROUP
# 配置后綴默認(rèn)是properties(只支持properties和ymal)
spring.cloud.nacos.config.file-extension=properties
# 是否開啟自動刷新配置(默認(rèn)true)
spring.cloud.nacos.config.refresh-enabled=true

注意當(dāng)你使用域名的方式來訪問 Nacos 時,spring.cloud.nacos.config.server-addr 配置的方式為 域名:port。

例如 Nacos 的域名為abc.com.nacos,監(jiān)聽的端口為 80,則 spring.cloud.nacos.config.server-addr=abc.com.nacos:80。 注意 80 端口不能省略。

在 Nacos Spring Cloud 中,dataId 的完整格式如${prefix}-${spring.profiles.active}.${file-extension}

  • prefix 默認(rèn)為 spring.application.name 的值,也可以通過配置項 spring.cloud.nacos.config.prefix來配置。
  • spring.profiles.active 即為當(dāng)前環(huán)境對應(yīng)的 profile,詳情可以參考 Spring Boot文檔。 注意:當(dāng) spring.profiles.active 為空時,對應(yīng)的連接符 - 也將不存在,dataId 的拼接格式變成 ${prefix}.${file-extension}
  • file-exetension 為配置內(nèi)容的數(shù)據(jù)格式,可以通過配置項 spring.cloud.nacos.config.file-extension 來配置。目前只支持 properties 和 yaml 類型。

注:Nacos Config相關(guān)的配置必須放在 bootstrap.properties 配置文件中,放在application.properties中自動刷新配置不會生效。

一般情況下,我們的應(yīng)用,應(yīng)該需要配置profile,而且要應(yīng)用Spring Boot和Maven的profile組合配置。所以,我們的pom文件豐富一下

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>CloudDemo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <build.name>CloudDemo</build.name>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>

        <spring.cloud.version>2021.0.4</spring.cloud.version>
        <spring.cloud.alibaba.version>2021.0.4.0</spring.cloud.alibaba.version>
    </properties>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.11</version>
    </parent>

    <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>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>

    <dependencies>

        <!-- 使用Nacos服務(wù)注冊與發(fā)現(xiàn) -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!-- 使用Nacos配置管理 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

        <!-- 支持讀取bootstrap配置 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- 添加web依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

    </dependencies>


    <profiles>
        <profile>
            <id>dev</id>
            <properties>
                <profileActive>dev</profileActive>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>test</id>
            <properties>
                <profileActive>test</profileActive>
            </properties>
        </profile>
        <profile>
            <id>pre</id>
            <properties>
                <profileActive>pre</profileActive>
            </properties>
        </profile>
        <profile>
            <id>prod</id>
            <properties>
                <profileActive>prod</profileActive>
            </properties>
        </profile>
    </profiles>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>

        <finalName>${build.name}</finalName>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <includes>
                    <include>mapper/**/*.xml</include>
                    <include>application.properties</include>
                    <include>application-${profileActive}.properties</include>
                    <include>bootstrap.properties</include>
                    <include>logback-spring.xml</include>
                </includes>
            </resource>
        </resources>
    </build>

</project>

application.properties配置

# 當(dāng)前應(yīng)用的訪問端口
server.port=8701
# 當(dāng)前應(yīng)用的訪問上下文
server.servlet.context-path=/myCloud

編寫啟動類

package com.yyoo.cloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication(scanBasePackages = {"com.yyoo"})
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

本示例的啟動類和普通的Spring Boot項目啟動類沒什么兩樣.

編寫測試Controller

package com.yyoo.cloud.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("conf")
@RefreshScope
public class TestConfController {

    @Value("${name:默認(rèn)值}")
    private String name;

    @RequestMapping("getName")
    public String getName(){
        System.out.println(this.name);
        return this.name;
    }

}

@RefreshScope是Spring Cloud 的原生注解,用于實現(xiàn)配置自動更新。

在Nacos界面上添加對應(yīng)的配置

啟動應(yīng)用并訪問

啟動后訪問 http://localhost:8701/myCloud/conf/getName

界面顯示結(jié)果:沒事兒寫兩篇

在界面修改配置 name=沒事兒寫兩篇2 ,再次訪問鏈接

界面顯示結(jié)果:沒事兒寫兩篇2

自定義擴展的 Data Id 配置

我們上面的示例,配置的dataId是通過特定的規(guī)則來自動匹配的,這樣很方便,但是也限制的很死。我們的同樣的應(yīng)用部署在不同的服務(wù)器,可能只是些許配置不一樣,怎樣能共用一樣的配置呢?上面的方式顯然是不行的。

Spring Cloud Alibaba Nacos Config 從 0.2.1 版本后,可支持自定義 Data Id 的配置。

使用spring.cloud.nacos.config.extension-configs配置

# 自定義擴展dataId ,extension-configs是個列表,意味著可以配置多個
# 必須帶文件擴展名,文件擴展名既可支持 properties,又可以支持 yaml/yml。
# 此時 spring.cloud.nacos.config.file-extension 的配置對自定義擴展配置的 Data Id 文件擴展名沒有影響。
spring.cloud.nacos.config.extension-configs[0].data-id=myCloud-common1.yml
# 配置的group,默認(rèn)DEFAULT_GROUP
spring.cloud.nacos.config.extension-configs[0].group=COMMON_GROUP
# 是否自動刷新(注意:這里默認(rèn)是false,如果需要自動刷新,必須配置為true)
spring.cloud.nacos.config.extension-configs[0].refresh=true

注意以上配置也是在bootstrap.properties中配置

在Nacos中新增配置

使用ConfigurationProperties來接收

package com.yyoo.cloud.conf;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@Data
@Configuration
@ConfigurationProperties("my.mycloud")
public class CommonConf {

    private String name;

    private int age;

    private String desc;

}

我們這里沒有添加@RefreshScope注解,因為我們使用spring.cloud.nacos.config.extension-configs[0].refresh=true配置了,所以配置是會自動刷新的。

TestController讀取配置

    @Resource
    private CommonConf conf;
    
    @RequestMapping("getCommonConf")
    public String getCommonConf() throws JsonProcessingException {
        System.out.println(conf);
        return this.conf.toString();
    }

訪問鏈接后輸出結(jié)果:CommonConf(name=沒事兒寫兩篇, age=12, desc=Spring Cloud 學(xué)習(xí))

注意:TestController中的CommonConf 是被代理之后的對象,包含很多內(nèi)容,建議不要用json進行轉(zhuǎn)換打印。

spring.cloud.nacos.config.shared-configs配置

spring.cloud.nacos.config.shared-configs[0].data-id=myCloud-common1.yml
spring.cloud.nacos.config.shared-configs[0].group=COMMON_GROUP
spring.cloud.nacos.config.shared-configs[0].refresh=true

其用法和extension-configs一樣。其主要作用是為了更加清晰的在多個應(yīng)用間配置共享的 Data Id。

各種配置方式的優(yōu)先級

  • A: 通過 spring.cloud.nacos.config.shared-configs[n].data-id 支持多個共享 Data Id 的配置
  • B: 通過 spring.cloud.nacos.config.extension-configs[n].data-id 的方式支持多個擴展 Data Id 的配置
  • C: 通過內(nèi)部相關(guān)規(guī)則(應(yīng)用名、應(yīng)用名+ Profile )自動生成相關(guān)的 Data Id 配置

當(dāng)三種方式共同使用時,他們的一個優(yōu)先級關(guān)系是:A < B < C

總結(jié)

我們實際項目當(dāng)中可能涉及到要在Nacos中添加很多配置,這些配置如何區(qū)分,如何定位?

Nacos的概念中,dataId、group、namespace是主要的區(qū)分和定位作用。本文示例中沒有使用namespace,其實如果我們命名規(guī)則定義的好,只通過dataId和group也能精準(zhǔn)定位。根據(jù)自身的需要制定合理的規(guī)則即可。

spring.cloud.nacos.config.namespace用于指定namespace,在沒有明確指定 ${spring.cloud.nacos.config.namespace} 配置的情況下, 默認(rèn)使用的是 Nacos 上 Public 這個namespace

通過設(shè)置 spring.cloud.nacos.config.enabled = false 可以完全關(guān)閉 Spring Cloud Nacos Config

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java爬蟲(Jsoup與WebDriver)的使用

    Java爬蟲(Jsoup與WebDriver)的使用

    這篇文章主要介紹了Java爬蟲(Jsoup與WebDriver)的使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 解決Java中SimpleDateFormat線程不安全的五種方案

    解決Java中SimpleDateFormat線程不安全的五種方案

    SimpleDateFormat 就是一個典型的線程不安全事例,本文主要介紹了解決Java中SimpleDateFormat線程不安全的五種方案,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • 聊聊SpringMVC項目依賴和靜態(tài)資源導(dǎo)出問題

    聊聊SpringMVC項目依賴和靜態(tài)資源導(dǎo)出問題

    這篇文章主要介紹了SpringMVC項目依賴和靜態(tài)資源導(dǎo)出問題,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • intellij idea 啟動tomcat 1099端口被占用的解決

    intellij idea 啟動tomcat 1099端口被占用的解決

    這篇文章主要介紹了intellij idea 啟動tomcat 1099端口被占用的解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Java基于ip2region.xdb數(shù)據(jù)庫從IP獲取到屬地解析的全攻略

    Java基于ip2region.xdb數(shù)據(jù)庫從IP獲取到屬地解析的全攻略

    在日常的Java開發(fā)中,IP地址相關(guān)的操作是非常常見的需求,無論是用戶行為分析、地域化服務(wù),還是安全防護,都需要精準(zhǔn)地獲取和解析IP信息,本文將詳細介紹一個功能完善的Java IP工具類,需要的朋友可以參考下
    2026-02-02
  • Java String字符串和Unicode字符相互轉(zhuǎn)換代碼詳解

    Java String字符串和Unicode字符相互轉(zhuǎn)換代碼詳解

    這篇文章主要介紹了Java String字符串和Unicode字符相互轉(zhuǎn)換代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • jbuilder2006連接sqlserver2000的方法

    jbuilder2006連接sqlserver2000的方法

    xp jbuiler2006 連接SQL SERVER2000的問題
    2008-10-10
  • 詳解IDEA搭建springBoot方式一(推薦)

    詳解IDEA搭建springBoot方式一(推薦)

    這篇文章主要介紹了IDEA搭建springBoot方式一(推薦),本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • java?spring?validation?自動、手動校驗

    java?spring?validation?自動、手動校驗

    HibernateValidator簡化了Java開發(fā)中的參數(shù)校驗過程,提供自動和手動兩種校驗方式,通過引入相關(guān)依賴并使用@Validated注解,可以實現(xiàn)自動校驗,手動校驗則需要使用ValidatorUtils類,此方法有效減少代碼重復(fù),提高開發(fā)效率
    2024-09-09
  • 詳解Java虛擬機(JVM)運行時

    詳解Java虛擬機(JVM)運行時

    JVM(Java虛擬機)是一個抽象的計算模型。這篇文章主要介紹了Java虛擬機(JVM)運行時的相關(guān)知識,需要的朋友可以參考下
    2018-10-10

最新評論

临海市| 满洲里市| 新沂市| 通许县| 崇左市| 新竹市| 云霄县| 娄烦县| 安吉县| 新安县| 福海县| 奎屯市| 贺州市| 遂平县| 邯郸市| 长汀县| 长兴县| 扬中市| 团风县| 重庆市| 历史| 仪征市| 七台河市| 茂名市| 江津市| 耒阳市| 启东市| 临海市| 察隅县| 建瓯市| 化德县| 米林县| 壤塘县| 永顺县| 莲花县| 绍兴县| 双江| 荔波县| 微山县| 溆浦县| 宕昌县|