在 Spring Cloud 中,自研了一个 Spring Cloud Config 框架来构建配置中心,并同时提供了配置服务器和多种配置仓库实现方案。
- 引入maven依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
2. 启动来使用@EnableConfigServer
@SpringBootApplication
@EnableConfigServer
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
@EnableConfigServer 用于启用Spring Cloud Config服务,有了这个注解,配置服务器就可以将所存储的配置信息转化为 RESTful 接口数据供各个业务微服务在分布式环境下进行使用。
Spring Cloud Config 中提供了多种配置仓库的实现方案,最常见的就是基于本地文件系统的配置方案和基于 Git 的配置方案。
3. 基于本地文件系统的配置方案
使用本地配置文件方案构建配置仓库时,一种典型的项目工程结构参考下图:

在 src/main/resources 目录下创建一个 springconfig 文件夹,在该文件夹下创建deviceservice和userservice文件夹,这两个文件夹必须要和各自的微服务名称一致。
application.yml配置内容
server:
port: 9090
#基于本地文件
spring:
profiles:
active: native
cloud:
config:
server:
native:
search-locations: classpath:springconfig/,classpath:springconfig/deviceservice,classpath:springconfig/userservice
userservice.yml配置信息如下:
spring:
jpa:
database: MYSQL
datasource:
platform: mysql
url: jdbc:mysql://127.0.0.1:3306/config_server
username: root
password: default
driver-class-name: com.mysql.jdbc.Driver
Spring Cloud Config 为我们提供了强大的集成入口,配置服务器可以将存放在本地文件系统中的配置文件信息自动转化为 RESTful 风格的接口数据。当我们启动配置服务后可以通过HTTP接口访问
localhost:9090/userservice/default

因为我们访问的是http://localhost:8888/userservice/default 端点,相当于获取的是 userservice.yml 文件中的配置信息,所以这里的"profiles"值为"default",意味着我们的配置文件的 Profile 是默认环境。
4. 基于第三方仓库配置方案
配置如下:
server:
port: 9090
#基于git仓库
spring:
cloud:
config:
discovery:
enabled: true
server:
encrypt:
enabled: false
git:
uri: https://github.com/gitname/springcloud-demo/config-repository
search-paths: deviceservice,userservice
username: your_username
password: pass
以上是基于github的一个demo
二、 Spring Cloud Config Client使用
- 引入Spring Cloud Config Client依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
2. 配置获取userservice服务名下的test配置:
spring:
application:
name: userservice
profiles:
active: test
cloud:
config:
enabled: true
uri: http://localhost:9090
config:
import: optional:configserver:http://localhost:9090
http://localhost:9090/userservice/test
{
"name": "userservice",
"profiles": [
"test"
],
"label": null,
"version": null,
"state": null,
"propertySources": [
{
"name": "class path resource [springconfig/userservice/userservice-test.yml]",
"source": {
"spring.jpa.database": "MYSQL",
"spring.datasource.platform": "mysql",
"spring.datasource.url": "jdbc:mysql://127.0.0.1:3306/config_server",
"spring.datasource.username": "root",
"spring.datasource.password": "test",
"spring.datasource.driver-class-name": "com.mysql.jdbc.Driver"
}
},
{
"name": "class path resource [springconfig/userservice/userservice.yml]",
"source": {
"spring.jpa.database": "MYSQL",
"spring.datasource.platform": "mysql",
"spring.datasource.url": "jdbc:mysql://127.0.0.1:3306/config_server",
"spring.datasource.username": "root",
"spring.datasource.password": "default",
"spring.datasource.driver-class-name": "com.mysql.jdbc.Driver"
}
}
]
}
3. 获取配置
@Configuration
@ConfigurationProperties(prefix = "spring.datasource")
public class DataSourceConfig {
private String platform;
private String url;
private String username;
private String password;
private String driverClassName;
//getter and setter
}
4. 使用从配置中心获取到的配置信息
1540



被折叠的 条评论
为什么被折叠?



