实现自定义的配置中心项目
除了配合后台管理页面的CRUD接口,本文主要介绍config服务的实现和client如何读取配置文件。
基于EnvironmentRepository
读取启动配置spring_cloud_config文件
1.配置中心项目端:
1)pom引入spring-cloud-config-server
2)实现EnvironmentRepository接口,重写findOne方法。
import org.springframework.cloud.config.server.environment.EnvironmentRepository;
public class ConfigEnvironmentRepository implements EnvironmentRepository, Ordered {
@Override
public int getOrder() {
return Ordered.HIGHEST_PRECEDENCE;
}
@Override
public Environment findOne(String application, String profile, String label) {
Environment env = new Environment(application, new String[]{profile}, label, version, null);
//获得content ,自定义是查询数据库还是读取git
// 解析yml
if (StringUtils.isNotBlank(content)) {
final String name = application + "-" + label;
final Map<String, Object> source = SpringYamlLoader.yaml2Map(name, content);
env.add(new PropertySource(name, source));
}
return env;
}
}
3)客户端调用的是EnvironmentController里的接口读取启动配置文件
源码:
EnvironmentController#labelled
2.客户端
1)pom引入pring-cloud-starter-config
2)bootstrap.yml配置配置中心项目地址:
config_server:
dev:
test:
pre:
prd:
DEPLOY_ENV: test
spring:
application:
name: xxx
cloud:
config:
uri: ${config_server.${DEPLOY_ENV}}
label: ${DEPLOY_ENV}
3)spring cloud项目启动时调用以下接口读取配置 /{name}/{profiles}/{label}
spring底层启动调用了接口/{name}/{profile}/{label}
源码
PropertySourceBootstrapConfiguration#initialize 实现了ApplicationContextInitializer初始化器接口
ConfigServicePropertySourceLocator#locate
ConfigServicePropertySourceLocator#getRemoteEnvironment
restTemplate.exchange(uri + path, HttpMethod.GET, entity,Environment.class, args)
path = /{name}/{profile}/{label}
http://url:port/name/default/test


浙公网安备 33010602011771号