Spring Cloud Config Client 讀取Config Server中的properties的設定方式如下。
範例環境:
- Spring Boot 2.3.4.RELEASE
- Spring Cloud Hoxton.SR8
參考「Spring Cloud Config Server 檔案系統classpath配置範例」配置Config Server並啟動。
Config Client要讀取的Config Server demo-test.properties
內容如下。
demo-test.properties
demo.env=DEMO TEST
在Spring Boot Web專案中加入Spring Cloud Config Client的設定如下。
<properties>
...
<spring-cloud.version>Hoxton.SR8</spring-cloud.version>
</properties>
<dependencies>
...
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</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
設定。
設定Config Client的application.yml
配置如下,server.port
設為8080
。
application.yml
server:
servlet:
context-path: /demo
port: 8080
在classpath src/main/resources
新增bootstrap.yml
(或bootstrap.properties
)並設定以下。
spring.application.name
對應Conifg Server的url資源路徑{application}
。spring.profiles.active
對應Conifg Server的url資源路徑{profile}
。spring.cloud.config.uri
指到Conifg Server的domain urlhttp://localhost:8888
。spring.cloud.config.fail-fast
設為true
則Config Client無法連線到Config Server時啟動會先報錯。
bootstrap.yml
spring:
application:
name: demo
profiles:
active: test
cloud:
config:
uri: http://localhost:8888
fail-fast: true
Config Server可透過下面url格式取得對應的設定檔資源,因此上面設定可取得Config Server的demo-test.properties
。
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
新增ConfigServerDemoProperties
,在類別名稱前加上@ConstructorBinding
綁定Config Server的demo-test.properites
,並加上@ConfigurationProperties(prefix = "demo")
指定讀取properties中以demo
為開頭的設定值。
ConfigServerDemoProperties
package com.abc.demo.properties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.ConstructorBinding;
@ConstructorBinding
@ConfigurationProperties(prefix = "demo")
public class ConfigServerDemoProperties {
private final String env; // demo.env
public ConfigServerDemoProperties(String env) {
this.env = env;
}
public String getEnv() {
return env;
}
}
在@SpringBootApplication
類使用@ConfigurationPropertiesScan
掃描所在package下的@ConstructorBinding
的類(即ConfigServerDemoProperties
)來註冊為bean。
DemoApplication
package com.abc.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
@ConfigurationPropertiesScan
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
到此便完成Config Client的設定。
使用ConfigServerDemoPropertiesTests
測試ConfigServerDemoProperties
有成功讀取到Config Server demo-test.properties
的demo.dev
設定值DEMO TEST
。
ConfigServerDemoPropertiesTests
package com.abc.demo.properties;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class ConfigServerDemoPropertiesTests {
@Autowired
private ConfigServerDemoProperties configServerDemoProperties;
@Value("${demo.env}")
private String demoEnv;
@Test
void getEnv_correct() {
System.out.println(demoEnv); // DEMO TEST
String env = configServerDemoProperties.getEnv();
Assertions.assertEquals("DEMO TEST", env); // pass
}
}
參考github。
沒有留言:
張貼留言