本文介绍如何进行Spring Cloud的Config,及Config客户端的创建及使用
Spring Cloud Config服务器
Spring Cloud Config 服务器应用本质上也是一个Spring Boot应用。因此先创建一个Spring Boot应用后进行配置即可。
修改pom.xml
中的依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
在pom.xml
中增加dependencyManagement
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>
Spring Cloud版本:
<properties>
<spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
</properties>
完整的pom.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.appsdeveloperblog.photoapp.api</groupId>
<artifactId>ConfigServer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>PhotoAppAPIConfigServer</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</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>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories>
</project>
修改application.properties
:
server.port=8012
spring.application.name=PhotoAppAPIConfigServer
spring.cloud.config.server.git.uri = https://github.com/simplyi/PhotoAppConfigData
spring.cloud.config.server.git.username = USER NAME HERE
spring.cloud.config.server.git.password = PASSWORD HERE
spring.cloud.config.server.git.clone-on-start=true
其中:
- spring.cloud.config.server.git.uri - 存放配置文件的git工程地址
- spring.cloud.config.server.git.username - Git仓库的用户名
- spring.cloud.config.server.git.password - Git仓库的密码
在Git仓库中放置了一个application.properties
文件,内容如下:
token.secret = jf9i4jgu83nfl0jfu57ejf1
配置文件还可以按照以下几种规则命名:
application.properties
- 默认名称{microservice-application-name}.properties
- 给特定的微服务使用的配置文件,microservice-application-name
是特定微服务在Eureka中的spring.application.name
名称,优先级高于application.properties
- {microservice-application-name}-{profile name}.properties - profile name 的值为dev,test,prod,优先级最高
@EnableConfigServer
注解
package com.xarhsoft.photoapp.api.ConfigServer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
访问如下地址将获取到配置文件:
http://localhost:8012/PhotoAppAPIConfigServer/default
其中:
- 8012 – Spring Cloud Config服务器端口,
- PhotoAppAPIConfigServer – Spring Cloud Config 服务工程中国
application.properties
文件定义的spring.application.name
属性 - default – 表示获取默认值
Spring Cloud Config客户端
Spring Cloud Config客户端同样是一个Spring Boot应用。自行创建后按照如下方式进行配置:
添加pom.xml
依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
指定Spring Cloud版本
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.RC2</spring-cloud.version>
</properties>
bootstrap.properties
文件
该文件在application.properties
文件加载前,在Java类对象创建前加载。
内容如下:
spring.cloud.config.uri=http://localhost:8012
spring.cloud.config.name=PhotoAppAPIConfigServer
其中:
- spring.cloud.config.uri – Spring Cloud Config 服务的地址
- spring.cloud.config.name – Spring Cloud Config Server的名称
读取配置的属性
在Spring Cloud Config客户端也就是微服务中使用配置的属性:
@RestController
@RequestMapping("/users")
public class UsersController {
@Value("${token.secret}")
String token;
@Value("${server.port}")
private String port;
@GetMapping("/status/check")
public String status() {
return "Working on port " + port + " with token " + token;
}
}
其中:
@Value(“${token.secret}”)
将读取前述存储在git中的token.secret
值。如果在服务器上没有找到,则会当前SpringBoot应用的application.properties中查找。因此,Spring Cloud Config服务器读取的配置优先级是比较高的。也就是说即使当前的SpringBoot应用的application.properties中存在同名属性,优先使用Spring Cloud Config服务器读取到的。