Spring Cloud 配置服務

https://www.cnblogs.com/dragonfei/p/6083193.html

Spring Cloud 配置服務

1. 配置服務簡介

  • 產生背景:
    傳統開發中,我們通常是將系統的業務無關配置(數據庫,緩存服務器)在properties中配置,在這個文件中不會經常改變,但隨着系統規模的擴大,項目成員越來越多,會有越來越多的夥伴更改配置文件,開發、測試、生產環境分離,因配置產生的問題越來越多。完全可以避免因配置文件的導致的問題產生,配置服務應運而生。
  • 什麼是配置服務?
    將配置統進行集中管理,提供一配置服務,開發、測試、生產環境均可直接從配置服務器中讀取配置信息。大致就是,應用在啓動後從配置服務器中獲取配置信息,加入到環境中。這樣所有的配置服務都可以進行集中管理。
  • 頂層架構設計如圖所示。
    client-server-scm

2. SpringBoot搭建配置服務:

  • pom.xml添加依賴:
<dependencies>
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-config-server</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-test</artifactId>
		<scope>test</scope>
	</dependency>
</dependencies>
<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-dependencies</artifactId>
			<version>Camden.SR2</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>
  • application.yml或者bootstrap.yml添加scm相關配置
spring:
  profiles:
    active: git
  cloud:
    config:
      enabled: true
      server:
        git:
          uri: http://ip:port/test/remoteConfig.git
          username: username
          password: password

3. 應用系統使用配置服務

  • pom.xml中添加配置:
<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-config</artifactId>
		</dependency>
	</dependencies>
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Camden.SR2</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>
  • application.yml或者bootstrap.yml添加配置服務器:
spring:
  cloud:
    config:
      name: db
      profile: dev
      label: master
      uri: http://ip:port
      enabled: true
  profiles:
    active: db

4. 服務器端實現:

服務器端實現比較簡單,大致流程是:當服務器接收到配置服務請求的時候,會首先從git倉庫中pull最新的配置信息到本地倉庫,然後服務器從本地倉庫中讀取所需要的配置信息返回給客戶端。

5. 客戶端實現:

  • spring-cloud-config-client.jar中的Spring.factories有如下一段配置
# Bootstrap components
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
org.springframework.cloud.config.client.ConfigServiceBootstrapConfiguration,\
org.springframework.cloud.config.client.DiscoveryClientConfigServiceBootstrapConfiguration

很明顯關鍵入口爲ConfigServiceBootstrapConfiguration,關鍵配置爲

@Bean
@ConditionalOnProperty(value = "spring.cloud.config.enabled", matchIfMissing = true)
public ConfigServicePropertySourceLocator configServicePropertySource(ConfigClientProperties properties) {
  ConfigServicePropertySourceLocator locator = new ConfigServicePropertySourceLocator(
      properties);
  return locator;
}

向spring容器中注入了ConfigServicePropertySourceLocator,容器在初始化的時候會調用locate方法,其流程如圖所示。
ConfigServicePropertySourceLocator.locate
關鍵方法爲RestTemplate的exchange方法。其主要功能爲的調用遠程服務器的接口獲取相關配置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章