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 Clientbootstrap.yml
(bootstrap.properties
)的spring.application.name
。{profile}
對應Config Clientbootstrap.yml
(bootstrap.properties
)的spring.profiles.active
啟用的profile。{label}
對應Config Server的spring.cloud.config.label
,決定git repo上設定檔的label(分支,預設master)。
而本範例的配置檔來源為檔案系統,而非git repo,所以label用不到。
從上面的配置檔來看,{application}
分別有config
即demo
;
{profile}
在config
即demo
皆有test
、dev
、prod
。
例如輸入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。
沒有留言:
張貼留言