spring cloud config server可以将配置放到一个统一的地方,并且以服务的形式提供出来。
本篇来通过两个简单的例子,来说明如何创建一个基于git仓库的config server,以及客户端如何使用它。
创建一个spring cloud config server
spring cloud config server支持好几种数据源,比如:文件系统、git仓库、关系型数据库,以及Eureka和Consul。
创建一个git仓库,用来存放配置项
# 创建一个文件夹,用来作为git仓库的目录
mkdir config-repo && cd config-repo
# 创建三个配置文件,里面包含一个配置项
echo 'role=engineer' > clientA.properties
echo 'role=developer' > clientA-develop.properties
echo 'role=programmer' > clientA-test.properties
# 初始化git仓库
git init
# 将文件加入暂存区,并提交
git add .
git commit -m 'add 3 properties files'
一个包含三个配置文件的git仓库就创建好了
获取代码模板
访问https://start.spring.io/,在dependencies中选择config-server,然后生成代码模板并下载。
在这个代码模板上,我们只需要修改两个地方,就可以创建一个config server了。
1,打开application.properties
文件,加入以下配置,第三行指定了config server的数据源是一个本地的git仓库
spring.application.name=config-server
server.port=8888
spring.cloud.config.server.git.uri=${HOME}/Demos/spring-cloud/config-repo
2,打开包含main方法的java文件,加入@EnableConfigServer
的注解
package com.example.configserver;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@EnableConfigServer
@SpringBootApplication
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
验证config server
启动项目,访问 http://localhost:8888/clientA/default ,会显示默认profile的配置。
访问 http://localhost:8888/clientA/test, 会显示test profile的配置
使用config server中的配置
config server已经有了,下面来看如何在应用程序中来读取它的配置项。
获取代码模板
访问https://start.spring.io/,在dependencies中选择config-client和spring web starter,然后生成代码模板并下载。
读取config server中的配置项
如果想要读取config server中的配置项,只需要两步
1、配置config server的地址
打开application.properties
文件,加入以下内容
spring.cloud.config.uri=http://localhost:8888
spring.application.name=clientA
spring.cloud.config.profile=test
spring.application.name
必须和config server中的文件名对应上,如果想使用config server中的其它profile的配置项,需要使用spring.cloud.config.profile
来指定。
2、 使用$Value
引用配置项
@RestController
public class HelloController {
@Value("${role}")
private String role;
@GetMapping("/hello")
public String hello() {
return "hello, " + role;
}
}
当springboot项目启动后,就会从配置中心读取对应的配置项,并注入到bean中。