欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一、前言

使用動(dòng)態(tài)配置的原因: properties 和 yaml 是寫(xiě)到項(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 的值,也可以通過(guò)配置項(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)
  • 沒(méi)有使用環(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)不能讀取的問(wè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")
// 開(kāi)啟自動(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)裝配出沒(méi)有使用 @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)文章

最新評(píng)論