一、简介
在分布式系统中,由于服务数量较多,为了方便服务配置文件统一管理、实时更新,所以需要配置中心组件。在Spring Cloud中,有分布式配置中心组建 Spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程仓库Git中。在spring cloud config 组件 中,分两个角色,一是config server,二是config client。
二、构建Config server
构建一个boot工程,父pom文件 如下:
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.1.2.RELEASE
com.lbh
eureka-config
0.0.1-SNAPSHOT
pom
eureka-config
Demo project for Spring Boot
config-server
config-client
UTF-8
UTF-8
1.8
Greenwich.RC2
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-starter-web
2.0.5.RELEASE
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
spring-milestones
Spring Milestones
https://repo.spring.io/milestone
构建一个module,取名为config-server,其pom.xml如下:【一定要注意 boot版本、cloud 版本, 否则不兼容】
4.0.0
org.springframework.boot
spring-boot-starter-parent
1.5.2.RELEASE
com.example
config-server
0.0.1-SNAPSHOT
jar
config-server
Demo project for Spring Boot
1.8
Camden.SR6
org.springframework.cloud
spring-cloud-starter-eureka
org.springframework.cloud
spring-cloud-config-server
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
spring-milestones
Spring Milestones
https://repo.spring.io/milestone
程序入口类加上 @EnableConfigServer注解开始配置服务器的功能,代码如下:
@EnableConfigServer
@SpringBootApplication
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
System.out.println("===================config-server 启动成功=============================");
}
}
配置文件 application.yml,如下:
spring:
application:
name: config-server
cloud:
config:
server:
git:
# uri: https://github.com/JavaAdvancer/SpringcloudConfig/
search-paths: /
username:
password:
uri: https://github.com/forezp/SpringcloudConfig/
label: master
server:
port: 2222
如果Git仓库为 公开仓库,可以不用填写用户名密码,如果是私有仓库需要填写,该例子为公开仓库,任意使用。
在远程仓库 https://github.com/forezp/SpringcloudConfig/ 中有一个文件 config-client-dev.properties 文件中有一个属性: foo = foo version 2
启动程序访问 http://localhost:2222/foo/dev : 浏览器显示
{
"name": "foo",
"profiles": [
"dev"
],
"label": "master",
"version": "00d32612a38898781bce791a4a845e60a7fbdb4e",
"state": null,
"propertySources": []
}
此证明配置服务中心 可以从远程程序获取配置信息。
http 请求地址和资源文件映射如下:
* /{application}/{profile}[/{label}]
* /{application}-{profile}.yml
* /{label}/{application}-{profile}.yml
* /{application}-{profile}.properties
* /{label}/{application}-{profile}.properties
三、构建一个config-client
创建一个module ,取名为 config-client,pom.xml 文件 如下:
4.0.0
org.springframework.boot
spring-boot-starter-parent
1.5.2.RELEASE
com.lbh
config-client
0.0.1-SNAPSHOT
jar
config-client
Demo project for Spring Boot
1.8
Dalston.RC1
org.springframework.cloud
spring-cloud-starter-config
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
spring-milestones
Spring Milestones
https://repo.spring.io/milestone
配置文件 application.yml 为:
spring:
application:
name: config-client
cloud:
config:
label: master
profile: dev
uri: http://localhost:2222/
server:
port: 2221
程序入口类,写一个API接口 “/hi”, 返回从配置中心读取的foo变量的值,代码如下:
package com.lbh.configclient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication
public class ConfigClientApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigClientApplication.class, args);
System.out.println("====================config-client 启动成功====================");
}
@Value("${foo}")
private String config;
@RequestMapping("/hi")
public String hi(){
return config;
}
}
打开网站 访问:http://localhost:2221/hi, 显示: foo version 2
这就说明 config-client 从config-server 获取了foo的属性,而config-server 是从Git仓库中读取的。如图:
代码下载地址:
https://github.com/JavaAdvancer/eureka-config
文章参考资料:
https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f6-config/