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

Java?nacos動(dòng)態(tài)配置實(shí)現(xiàn)流程詳解

 更新時(shí)間:2022年09月02日 10:07:13   作者:洛祁楓  
使用動(dòng)態(tài)配置的原因是properties和yaml是寫到項(xiàng)目中的,好多時(shí)候有些配置需要修改,每次修改就要重新啟動(dòng)項(xiàng)目,不僅增加了系統(tǒng)的不穩(wěn)定性,也大大提高了維護(hù)成本,非常麻煩,且耗費(fèi)時(shí)間

一、前言

使用動(dòng)態(tài)配置的原因: properties 和 yaml 是寫到項(xiàng)目中的,好多時(shí)候有些配置需要修改,每次修改就要重新啟動(dòng)項(xiàng)目,不僅增加了系統(tǒng)的不穩(wěn)定性,也大大提高了維護(hù)成本,非常麻煩,且耗費(fèi)時(shí)間。

使用動(dòng)態(tài)配置,則可以避免這些麻煩,可以動(dòng)態(tài)的修改配置,不需要重新啟動(dòng)項(xiàng)目。

nacos配置中心,可以使得配置標(biāo)準(zhǔn)化、格式統(tǒng)一化,當(dāng)配置信息發(fā)生變動(dòng)時(shí),修改實(shí)時(shí)生效,無(wú)需要重新重啟服務(wù)器,就能夠自動(dòng)感知相應(yīng)的變化,并將新的變化統(tǒng)一發(fā)送到相應(yīng)程序上,快速響應(yīng)變化。

本次環(huán)境使用版本:NACOS1.4.2; spring-boot 2.3.9.RELEASE;nacos-config-spring-boot-starter 0.2.1

二、在nacos上創(chuàng)建配置文件

創(chuàng)建配置文件

在默認(rèn)命名空間中,創(chuàng)建一個(gè)配置文件

配置說(shuō)明

  • Data ID —— 用于項(xiàng)目讀取名稱,spring-nacos 動(dòng)態(tài)配置命名規(guī)范為 :{prefix}-{spring.profiles.active}.{file-extension}
  • prefix 默認(rèn)為 spring.application.name 的值,也可以通過配置項(xiàng) spring.cloud.nacos.config.prefix來(lái)配置。
  • spring.profiles.active 即為當(dāng)前環(huán)境對(duì)應(yīng)的 profile,就是環(huán)境的命名,比如 test 環(huán)境, dev 環(huán)境;spring.profiles.active 可以為空,為空著不區(qū)分環(huán)境信息,dataId 的拼接格式變成 {prefix}.{file-extension}。
  • file-exetension 為配置內(nèi)容的數(shù)據(jù)格式,一般常用 properties 和 yaml 類型。

說(shuō)明:

  • 我這次修改的項(xiàng)目是網(wǎng)關(guān),項(xiàng)目名稱 :gateway(spring.application.name= gateway)
  • 沒有使用環(huán)境配置
  • 所以 nacos 的配置文件為: {prefix}.{file-extension} 即 gateway.yml
  • 如果有配置環(huán)境的,可以為 {prefix}-{spring.profiles.active}.{file-extension} 即 gateway-dev.yml

本次配置文件名稱為 gateway.yml

注意: 項(xiàng)目啟動(dòng)時(shí),nacos-config 會(huì)自動(dòng)加載以下文件,故以下文件名稱都可以作為默認(rèn)動(dòng)態(tài)配置的文件格式。

  • icp-gateway-dev.yml,icp-gateway.yml,icp-gateway,(說(shuō)明,這三個(gè)文件,可以指定命名 nacos 分組)
  • common.yml (該文件為默認(rèn)分組,DEFAULT_GROUP)

添加測(cè)試使用的配置 nacosConfigDemmo: NAME1

說(shuō)明: 本次配置項(xiàng)目,分組名稱為 ICP_PLATFORM (注意:分組名稱建議使用下劃線 _ ,不建議使用 中橫線 - ,中橫線會(huì)有幾率出現(xiàn)不能讀取的問題,使用連接符請(qǐng)注意使用;分組名可以自定,如果要區(qū)分命名空間,需要到 nacos 命名空間 中新建 命名空間)

發(fā)布并檢查配置文件

編輯完成之后,直接點(diǎn)擊發(fā)布,會(huì)提示新建完成

點(diǎn)擊確定,然后點(diǎn)擊返回配置中心,在配置列表中能找到自己的配置文件,確保文件內(nèi)容正確即可

至此,配置文件完成,接下來(lái)在項(xiàng)目中使用這個(gè)配置文件。

三、 修改項(xiàng)目配置與動(dòng)態(tài)讀取配置文件

添加 nacos 動(dòng)態(tài)配置依賴

在 pom.xml 文件中,添加依賴。

<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>nacos-config-spring-boot-starter</artifactId>
    <version>0.2.1</version>
</dependency>

修改項(xiàng)目配置文件,讀取 nacos 中的配置內(nèi)容

# 指定啟動(dòng)端口
server:
  port: 7200
spring:
  application:
  # 指定服務(wù)名稱
    name: gateway
  # 項(xiàng)目運(yùn)行環(huán)境,可以搭配在 nacos 動(dòng)態(tài)配置文件名上面,不同環(huán)境使用不同的動(dòng)態(tài)配置
  profiles:
    active: dev
  cloud:
    nacos:
      config:
          server-addr: 127.0.0.1:8848  #nacos 的注冊(cè)地址
        file-extension: yml  #動(dòng)態(tài)配置文件的 格式。就是 nacos 中的動(dòng)態(tài)配置,這里是 yml
        group: ICP_PLATFORM  #nacos 動(dòng)態(tài)配置的分組,要與 nacos 配置文件保持一致
#        namespace:   #namespace 是nacos 的命名空間,我這兒是默認(rèn)空間,就不配置了 

在controller與service中使用動(dòng)態(tài)配置

controller 代碼:

import com.insupro.search2.service.IIndexService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/demo")
public class nacosConfigDemmo {
    @Autowired
    private DemoService demoService;
    @GetMapping("/name")
    public Object showDemoName(){
        return demoService.showDemoName();
    }
}

service 接口代碼:

public interface IIndexService {
	Object showDemoName();
}

service 實(shí)現(xiàn)代碼:

import com.insupro.search2.service.demoService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Service;
@Service
// 注意,要自動(dòng)刷新配置,需要 @RefreshScope 這個(gè)注解
@RefreshScope
public class demoServiceImpl implements demoService{
	/**
	* 使用在上面nacos 中添加的測(cè)試使用配置。
	*/
    @Value("${nacosConfigDemmo}")
    private String demoName;
    @Override
    public Object showDemoName(){
        return demoName;
    }
}

運(yùn)行,請(qǐng)求接口地址,得到響應(yīng)值:

postman 請(qǐng)求,第一次響應(yīng),值為 NAME2

修改 nacos 配置文件,將 nacosConfigDemmo: NAME1 改為 nacosConfigDemmo: NAME2 并發(fā)布

等待控制臺(tái)打印: Refresh keys changed: [nacosConfigDemmo],則動(dòng)態(tài)配置已經(jīng)生效

再次請(qǐng)求,發(fā)現(xiàn)返回值已經(jīng)改變:

請(qǐng)求結(jié)果,NAME1 已經(jīng)變成 NAME2,項(xiàng)目不需要重啟,動(dòng)態(tài)配置已經(jīng)生效。

四、 動(dòng)態(tài)配置網(wǎng)關(guān)的使用

導(dǎo)入配置,網(wǎng)關(guān)不進(jìn)行權(quán)限校驗(yàn)的路徑

獲取配置文件,生成 bean

import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
// 自動(dòng)刷新機(jī)制,需要 get 方法支撐
@Setter
@Getter
// 獲取配置文件
@ConfigurationProperties(prefix = "security.ignore")
// 開啟自動(dòng)刷新
@RefreshScope
public class SecurityProperties { 
    private PermitProperties ignore = new PermitProperties();
}

配置文件實(shí)體類

import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class PermitProperties {
    /**
     * 設(shè)置不用認(rèn)證的url
     */
    private String[] httpUrls = {};
    public String[] getUrls() {
        if (httpUrls == null || httpUrls.length == 0) {
            return new ArrayList<>();
        }
        List<String> list = new ArrayList<>();
        for (String url : httpUrls) {
            list.add(url);
        }
        return list.toArray(new String[list.size()]);
    }
 }

至此,導(dǎo)入自動(dòng)配置完成,可以根據(jù)自己的業(yè)務(wù)代碼進(jìn)行網(wǎng)關(guān)的配置與使用。

但是??!注意?。?如果在配置文件中調(diào)用配置,則需要在配置文件中使用 @RefreshScope 注解,用于刷新配置。因?yàn)榕渲梦募陧?xiàng)目啟動(dòng)時(shí)便已經(jīng)完成加載。

例如:

@Configuration
public class ResourceServerConfiguration {
    @Autowired
    private SecurityProperties securityProperties;
    // 使用了 @Configuration 定義配置文件,并在配置類中使用 @Bean 裝配 bean,此時(shí)如果在自動(dòng)裝配出沒有使用 @RefreshScope 注解,則自動(dòng)配置不會(huì)生效。
    @Bean
    @Autowired(required = false)
    @RefreshScope
    SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
        if (securityProperties.getIgnore().getUrls().length > 0) {
            authorizeExchange.pathMatchers(securityProperties.getIgnore().getUrls()).permitAll();
        }
        // TODO 余下自行業(yè)務(wù)代碼 …………
        return http.build();
    }
}

到此這篇關(guān)于Java nacos動(dòng)態(tài)配置實(shí)現(xiàn)流程詳解的文章就介紹到這了,更多相關(guān)Java nacos動(dòng)態(tài)配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java學(xué)習(xí)之junit單元測(cè)試案例(經(jīng)典版)

    java學(xué)習(xí)之junit單元測(cè)試案例(經(jīng)典版)

    這篇文章主要介紹了java學(xué)習(xí)之junit單元測(cè)試的相關(guān)資料,文中講解了JUnit單元測(cè)試的基本概念、作用、使用assert進(jìn)行驗(yàn)證、覆蓋率分析、BeforeEach和AfterAll的使用、通過反射和注解實(shí)現(xiàn)測(cè)試,需要的朋友可以參考下
    2024-12-12
  • JavaWeb搭建網(wǎng)上圖書商城畢業(yè)設(shè)計(jì)

    JavaWeb搭建網(wǎng)上圖書商城畢業(yè)設(shè)計(jì)

    這篇文章主要介紹了JavaWeb搭建網(wǎng)上圖書商城框架,特別適合正在為網(wǎng)上商城畢業(yè)設(shè)計(jì)煩惱的同學(xué),需要的朋友可以參考下
    2015-11-11
  • 程序包org.springframework不存在的解決辦法

    程序包org.springframework不存在的解決辦法

    這篇文章主要介紹了程序包org.springframework不存在的解決辦法,在使用IDEA創(chuàng)建SpringBoot項(xiàng)目時(shí),剛打開無(wú)法正常運(yùn)行,本文通過圖文結(jié)合的方式給大家介紹的非常詳細(xì),具有一定參考價(jià)值,需要的朋友可以參考下
    2024-07-07
  • MyBatis-plus 模糊查詢的使用

    MyBatis-plus 模糊查詢的使用

    這篇文章主要介紹了MyBatis-plus 模糊查詢的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Day14基礎(chǔ)不牢地動(dòng)山搖-Java基礎(chǔ)

    Day14基礎(chǔ)不牢地動(dòng)山搖-Java基礎(chǔ)

    這篇文章主要給大家介紹了關(guān)于Java中方法使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • 關(guān)于JWT之token令牌認(rèn)證登錄

    關(guān)于JWT之token令牌認(rèn)證登錄

    這篇文章主要介紹了關(guān)于JWT之token令牌認(rèn)證登錄,使用JWT能夠保證Token的安全性,且能夠進(jìn)行Token時(shí)效性的檢驗(yàn),使用JWT時(shí),登錄成功后將用戶信息生成一串令牌字符串,需要的朋友可以參考下
    2023-05-05
  • Java單例模式、饑餓模式代碼實(shí)例

    Java單例模式、饑餓模式代碼實(shí)例

    這篇文章主要介紹了Java單例模式、饑餓模式代碼實(shí)例,本文直接給出代碼實(shí)例,需要的朋友可以參考下
    2015-05-05
  • Springmvc ajax跨域請(qǐng)求處理方法實(shí)例詳解

    Springmvc ajax跨域請(qǐng)求處理方法實(shí)例詳解

    這篇文章主要介紹了Springmvc ajax跨域請(qǐng)求處理方法實(shí)例詳解,需要的朋友可以參考下
    2017-10-10
  • spring boot中配置hikari連接池屬性方式

    spring boot中配置hikari連接池屬性方式

    這篇文章主要介紹了spring boot中配置hikari連接池屬性方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 解決mybatis resultMap根據(jù)type找不到對(duì)應(yīng)的包問題

    解決mybatis resultMap根據(jù)type找不到對(duì)應(yīng)的包問題

    這篇文章主要介紹了解決mybatis resultMap根據(jù)type找不到對(duì)應(yīng)的包問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評(píng)論

观塘区| 岳阳县| 绥棱县| 东方市| 会同县| 义马市| 肃宁县| 东山县| 凉城县| 罗江县| 庆元县| 富顺县| 鄂托克旗| 盈江县| 隆安县| 阿巴嘎旗| 河池市| 综艺| 徐水县| 贺州市| 琼结县| 怀仁县| 汽车| 西丰县| 磐安县| 黄石市| 嘉祥县| 太湖县| 扎兰屯市| 玉屏| 保亭| 重庆市| 霍城县| 乌兰县| 通渭县| 永平县| 泰州市| 克什克腾旗| 万州区| 吕梁市| 文山县|