概述
在常规单体项目开发中,我们会有很多配置,比如本地开发环境配置、测试环境配置、生产环境配置、开关配置等
通常我们都会放在resource文件夹下,在编译打包期间,把对应的profile打包进去。
在微服务环境下场景下,由于服务的拆分会衍生出N个服务,这样每个服务都需要去写配置文件,这样一来需要管理的配置文件数据急剧上升,上线后如果需要改一些配置,会很头疼。
然而这些都不是问题,Spring Cloud为我们提供了一个统一配置管理中心Spring Cloud Config 来解决这些问题
Spring Cloud Config 角色
Spring Cloud Config可以分成3个部分
- 远程文件,git、subversion、native、vault
- Config Server 配置中心
- Config Client 配置客户端
Spring CLoud Config Server 启动分析
EnvironmentRepositoryConfiguration.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| @Configuration @ConditionalOnMissingBean(EnvironmentRepository.class) protected static class DefaultRepositoryConfiguration {
@Autowired private ConfigurableEnvironment environment;
@Autowired private ConfigServerProperties server;
@Bean public MultipleJGitEnvironmentRepository defaultEnvironmentRepository() { MultipleJGitEnvironmentRepository repository = new MultipleJGitEnvironmentRepository(this.environment); if (this.server.getDefaultLabel()!=null) { repository.setDefaultLabel(this.server.getDefaultLabel()); } return repository; } } @Configuration @Profile("native") protected static class NativeRepositoryConfiguration {
@Autowired private ConfigurableEnvironment environment;
@Bean public NativeEnvironmentRepository nativeEnvironmentRepository() { return new NativeEnvironmentRepository(this.environment); } }
@Configuration @Profile("git") protected static class GitRepositoryConfiguration extends DefaultRepositoryConfiguration {}
@Configuration @Profile("subversion") protected static class SvnRepositoryConfiguration { @Autowired private ConfigurableEnvironment environment;
@Autowired private ConfigServerProperties server;
@Bean public SvnKitEnvironmentRepository svnKitEnvironmentRepository() { SvnKitEnvironmentRepository repository = new SvnKitEnvironmentRepository(this.environment); if (this.server.getDefaultLabel()!=null) { repository.setDefaultLabel(this.server.getDefaultLabel()); } return repository; } }
@Configuration @Profile("vault") protected static class VaultConfiguration { @Bean public VaultEnvironmentRepository vaultEnvironmentRepository(HttpServletRequest request, EnvironmentWatch watch) { return new VaultEnvironmentRepository(request, watch, new RestTemplate()); } }
|