AdSense

網頁

2020/10/28

Spring Cloud Config Server 檔案系統classpath配置範例 filesystem classpath configuration

Spring Cloud Config Server 使用檔案系統classpath配置(File System Backend)。

範例環境:

  • Spring Boot 2.3.4.RELEASE
  • Spring Cloud Hoxton.SR8

參考「Spring Cloud Config Server 檔案系統配置範例」。

本範例要把properties設定在專案的classpath目錄中,而非專案以外的檔案系統目錄。

修改Spring Cloud Config Server的application.yml配置如下,把spring.cloud.config.server.native.searchLocations的值改為classpath:config/,也就是以專案classpath下的config/做為properties檔來源。

application.yml

server:
  port: 8888

spring:
  profiles:
    active: native
  cloud:
    config:
      server:
        native:
          searchLocations: classpath:config/

在專案的classpath src/main/resources新增config資料夾,並把以下properties放在這裡。

config-test.properties

config.env=CONFIG TEST

config-dev.properties

config.env=CONFIG DEV

config-prod.properties

config.env=CONFIG PROD

demo-test.properties

demo.env=DEMO TEST

demo-dev.properties

demo.env=DEMO DEV

demo-prod.properties

demo.env=DEMO PROD

設定properties檔後啟動專案,可透過下面url格式取得對應的設定檔資源。

/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties

  • {application}對應Config Client bootstrap.yml(bootstrap.properties)的spring.application.name
  • {profile}對應Config Client bootstrap.yml(bootstrap.properties)的spring.profiles.active啟用的profile。
  • {label}對應Config Server的spring.cloud.config.label,決定git repo上設定檔的的label(分支,預設master)。

而本範例的配置檔來源為檔案系統classpath,而非git repo,所以label用不到。

從上面的配置檔來看,{application}分別有configdemo
{profile}configdemo皆有testdevprod

例如輸入http://localhost:8888/config/test回傳以下結果。

{
  "name":"config",
  "profiles":[
    "test"
  ],
  "label":null,
  "version":null,
  "state":null,
  "propertySources":[
    {
      "name":"file:///D:/server/config/config-test.properties",
      "source":{
        "config.env":"CONFIG TEST"
      }
    }
  ]
}

輸入http://localhost:8888/config/prod回傳以下結果。

{
  "name":"config",
  "profiles":[
    "prod"
  ],
  "label":null,
  "version":null,
  "state":null,
  "propertySources":[
    {
      "name":"file:///D:/server/config/config-prod.properties",
      "source":{
        "config.env":"CONFIG PROD"
      }
    }
  ]
}

輸入http://localhost:8888/demo/dev回傳以下結果。

{
  "name":"demo",
  "profiles":[
    "dev"
  ],
  "label":null,
  "version":null,
  "state":null,
  "propertySources":[
    {
      "name":"file:///D:/server/config/demo-dev.properties",
      "source":{
        "demo.env":"DEMO DEV"
      }
    }
  ]
}

輸入http://localhost:8888/config-dev.properties回傳以下結果。

config.env: CONFIG DEV

輸入http://localhost:8888/demo-test.properties回傳以下結果。

demo.env: DEMO TEST

輸入http://localhost:8888/demo-prod.properties回傳以下結果。

demo.env: DEMO PROD

參考github


接著參考「Spring Cloud Config Client 讀取Config Server配置範例」配置Config Client來讀取Config Server的properties。


沒有留言:

AdSense