当前位置: 首页 > news >正文

Spring Cloud全解析:配置中心之springCloudConfig配置存储

配置存储

springCloudConfig是使用EnvironmentRepository来存储服务器的配置数据的,返回Environment对象

public Environment(@JsonProperty("name") String name,
			@JsonProperty("profiles") String[] profiles,
			@JsonProperty("label") String label, @JsonProperty("version") String version,
			@JsonProperty("state") String state) {
		super();
		this.name = name;
		this.profiles = profiles;
		this.label = label;
		this.version = version;
		this.state = state;
	}

基于本地文件

如果存储是基于文件的,即配置了spring.cloud.config.server.native.searchLocation,此时使用的是NativeEnvironmentRepository来查找配置

使用本地文件的前提是要配置spring.prifiles.active=native

@Configuration(proxyBeanMethods = false)
@Profile("native")
class NativeRepositoryConfiguration {

   @Bean
   public NativeEnvironmentRepository nativeEnvironmentRepository(
         NativeEnvironmentRepositoryFactory factory,
         NativeEnvironmentProperties environmentProperties) {
      return factory.build(environmentProperties);
   }

}

只有配置了spring.prifiles.active=native才会创建NativeEnvironmentRepository这个bean

基于Git

如果存储是基于git的,即配置了spring.cloud.config.server.git.uri,此时使用的是JGitEnvironmentRepository来查找配置

if (getUri().startsWith(FILE_URI_PREFIX)) {
   return copyFromLocalRepository();
}
else {
   return cloneToBasedir();
}

如果使用file:前缀来进行设置的,此时是从本地Git仓库获取的,也就不需要克隆

private Git copyFromLocalRepository() throws IOException {
   Git git;
   File remote = new UrlResource(StringUtils.cleanPath(getUri())).getFile();
   Assert.state(remote.isDirectory(), "No directory at " + getUri());
   File gitDir = new File(remote, ".git");
   Assert.state(gitDir.exists(), "No .git at " + getUri());
   Assert.state(gitDir.isDirectory(), "No .git directory at " + getUri());
   git = this.gitFactory.getGitByOpen(remote);
   return git;
}

如果不是用file前缀来进行设置的,就需要从git库去进行clone

private Git cloneToBasedir() throws GitAPIException {
   CloneCommand clone = this.gitFactory.getCloneCommandByCloneRepository()
         .setURI(getUri()).setDirectory(getBasedir());
   configureCommand(clone);
   try {
      return clone.call();
   }
   catch (GitAPIException e) {
      this.logger.warn("Error occured cloning to base directory.", e);
      deleteBaseDirIfExists();
      throw e;
   }
}

https://zhhll.icu/2023/框架/微服务/springcloud/配置中心/springCloudConfig/5.配置存储/

相关文章:

  • leetcode 41-50(2024.08.19)
  • 嵌入式软件--模电基础 DAY 2
  • 手撕C++入门基础
  • PyTorch分布式训练全攻略:DistributedDataParallel精解与实战
  • 数据结构——单链表
  • (计算机网络)网络层
  • 【Unity教程】使用 Animation Rigging实现IK制作程序化的动画手臂跟随手自动移动等效果
  • JS DOM、点击事件
  • redis列表若干记录
  • 如何使用用户名和密码访问salesforce的api
  • 【C++】C++11新增特性
  • 云计算实训31——playbook(剧本)基本应用、playbook常见语法、playbook和ansible操作的编排
  • ADB-DROM
  • 自学编程从哪个语言入手比较好?
  • 【数据结构初阶】二叉树--基本概念
  • Python实现文件复制和移动的高级技巧
  • 汽车免拆诊断案例 | 2013款北京现代悦动车发动机偶尔无法起动
  • 湖北风水大师李彦良受邀为徐东商圈武汉印楼盘做易经风水讲座
  • HTML左右分页更新【搬代码】
  • JavaScript语法基础之转义字符与注释
  • 体坛联播|拜仁提前2轮德甲夺冠,赵心童11比6暂时领先
  • 黎巴嫩9年来首次举行地方选举
  • 外交部就习近平主席将应邀对俄罗斯进行国事访问并出席纪念苏联伟大卫国战争胜利80周年庆典答问
  • 人民日报:创新成势、澎湃向前,中国科技创新突围的密码与担当
  • 胖东来回应“浙江‘胖都来’卖场开业”:已取证并邮寄律师函
  • 2024年境内酒店住宿行业指标同比下滑:酒店行业传统增长模式面临挑战