Spring-Cloud-Gateway之GatewayProperties初始化加載

在Spring-Cloud-Gateway初始化時我們在GatewayAutoConfiguration配置中看到了有初始化加載GatewayProperties實例的配置,接下來學(xué)習(xí)下GatewayProperties都加載了哪些信息


GatewayAutoConfiguration中我看到加載GatewayProperties如下:

    //加載配置beans
    // ConfigurationProperty beans
    @Bean
    public GatewayProperties gatewayProperties() {
        return new GatewayProperties();
    }

GatewayProperties的代碼如下:

/**
 * 網(wǎng)關(guān)配置信息加載
 * 從appliccation.yml中解析前綴為spring.cloud.gateway的配置
 * @author Spencer Gibb
 */
@ConfigurationProperties("spring.cloud.gateway")
@Validated
public class GatewayProperties {

    /**
     * 路由定義列表
     * 加載配置key=spring.cloud.gateway.routes 列表
     * List of Routes
     */
    @NotNull
    @Valid
    private List<RouteDefinition> routes = new ArrayList<>();

    /**
     * 默認(rèn)的過濾器定義列表
     * 加載配置 key = spring.cloud.gateway.default-filters 列表
     * List of filter definitions that are applied to every route.
     */
    private List<FilterDefinition> defaultFilters = new ArrayList<>();

    /**
     * 網(wǎng)媒體類型列表
     * 加載配置 key = spring.cloud.gateway.streamingMediaTypes 列表
     * 默認(rèn)包含{text/event-stream,application/stream+json}
     */
    private List<MediaType> streamingMediaTypes = Arrays.asList(MediaType.TEXT_EVENT_STREAM,
            MediaType.APPLICATION_STREAM_JSON);
}           

由GatewayProperties代碼可以看出其包含如下配置信息

  • spring.cloud.gateway.routes:網(wǎng)關(guān)路由定義配置,列表形式
  • spring.cloud.gateway.default-filters: 網(wǎng)關(guān)默認(rèn)過濾器定義配置,列表形式
  • spring.cloud.gateway.streamingMediaTypes:網(wǎng)關(guān)網(wǎng)絡(luò)媒體類型,列表形式

同時,我們看到代碼中的routes其實RouteDefinition集合,defaultFilters是FilterDefinition集合,在Spring-Cloud-Gateway之route數(shù)據(jù)模型我們已經(jīng)分析了這兩個數(shù)據(jù)模型所有的字段含義以及類型了。通過數(shù)據(jù)模型以及代碼可以看出配置中可以包含的具體信息。


  • spring.cloud.gateway.routes
  • id:路由ID 編號,唯一
  • uri: 路由指向的URI
  • order: 順序
  • predicates:謂語數(shù)組,列表形式

  • spring.cloud.gateway.default-filters
  • name:過濾器定義名稱
  • args: 參數(shù)

接下來看下Spring-Cloud-Gateway給的樣例工程(spring-cloud-gateway-sample)中的配置

spring:
  cloud:
    gateway:
      default-filters:
      - PrefixPath=/httpbin
      - AddResponseHeader=X-Response-Default-Foo, Default-Bar
      routes:
      - id: websocket_test
        uri: ws://localhost:9000
        order: 9000
        predicates:
        - Path=/echo
      - id: default_path_to_httpbin
        uri: ${test.uri}
        order: 10000
        predicates:
        - Path=/**

  • 備注

default-filters下配置PrefixPath=/httpbin字符串,可以查看FilterDefinition中構(gòu)造函數(shù),它接收一個text字符串解析字符傳并創(chuàng)建實例信息。同樣predicates配置與其一致。
字符傳格式:name=param1,param2,param3.....。

如下:

    public FilterDefinition(String text) {
        int eqIdx = text.indexOf("=");
        if (eqIdx <= 0) {
            setName(text);
            return;
        }
        setName(text.substring(0, eqIdx));

        String[] args = tokenizeToStringArray(text.substring(eqIdx+1), ",");

        for (int i=0; i < args.length; i++) {
            this.args.put(NameUtils.generateName(i), args[i]);
        }
    }

上面的配置可以很容易的知道最終加載出來GatewayProperties實例中都包含哪些信息。

弄懂了配置的具體加載以及初始化會加深對網(wǎng)關(guān)整體流程的理解,合理的使用配置文件定義我們自己的需求,快速的根據(jù)配置定位,了解服務(wù)的詳細情況

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容