網頁

2020/10/27

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

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

範例環境:

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

在Spring Boot Web專案中加入Spring Cloud Config Server的Maven依賴如下,

<properties>
    ...
    <spring-cloud.version>Hoxton.SR8</spring-cloud.version>
</properties>

<dependencies>
    ...

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-config-server</artifactId>
    </dependency>

</dependencies>

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

參考完整的pom.xml設定。

在Spring Boot的@SpringBootApplication類前加上@EnableConfigServer啟用Spring Cloud Config Server。

DemoApplication

package com.abc.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;

@EnableConfigServer
@SpringBootApplication
public class DemoApplication {

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

}


設定Spring Cloud Config Server的application.yml配置如下。
server.port=8888修改Spring Cloud Config Server的url port為8888
spring.profiles.active=native設定從本機檔案系統下讀取配置檔,而非從git repository。
spring.cloud.config.server.native.searchLocations=file:///D:/server/config設定從本機的D:/server/config讀取properties檔。(也可用classpath設定從專案目錄的路徑讀取)

application.yml

server:
  port: 8888

spring:
  profiles:
    active: native
  cloud:
    config:
      server:
        native:
          searchLocations: file:///D:/server/config

在本機的D:/server/config路徑新增以下設定檔。

D:\server\config>dir
 磁碟區 D 中的磁碟沒有標籤。
 磁碟區序號:  86AB-B237

 D:\server\config 的目錄

2020/10/27  下午 06:28    <DIR>          .
2020/10/27  下午 06:28    <DIR>          ..
2020/10/27  下午 06:30                21 config-dev.properties
2020/10/27  下午 06:30                22 config-prod.properties
2020/10/27  下午 06:30                22 config-test.properties
2020/10/27  下午 06:29                17 demo-dev.properties
2020/10/27  下午 06:29                18 demo-test.properties
2020/10/27  下午 06:29                18 dmeo-prod.properties
               6 個檔案             118 位元組
               2 個目錄  488,698,626,048 位元組可用

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

而本範例的配置檔來源為檔案系統,而非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。


沒有留言:

張貼留言