史上最简单的SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)

灰太狼 2022-06-09 05:14 245阅读 0赞

版权声明:本文为博主原创文章,欢迎转载,转载请注明作者、原文超链接 ,博主地址:http://blog.csdn.net/forezp。

目录(?)[+]

转载请标明出处:
http://blog.csdn.net/forezp/article/details/70037291
本文出自方志朋的博客
在上一篇文章讲述zuul的时候,已经提到过,使用配置服务来保存各个服务的配置文件。它就是spring Cloud Config。

一、简介

在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。在spring cloud config 组件中,分两个角色,一是config server,二是config client。

二、构建Config Server

创建一个spring-boot项目,取名为config-server,其pom.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.forezp</groupId>
  5. <artifactId>config-server</artifactId>
  6. <version>0.0.1-SNAPSHOT</version>
  7. <packaging>jar</packaging>
  8. <name>config-server</name>
  9. <description>Demo project for Spring Boot</description>
  10. <parent>
  11. <groupId>org.springframework.boot</groupId>
  12. <artifactId>spring-boot-starter-parent</artifactId>
  13. <version>1.5.2.RELEASE</version>
  14. <relativePath/> <!-- lookup parent from repository -->
  15. </parent>
  16. <properties>
  17. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  18. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  19. <java.version>1.8</java.version>
  20. </properties>
  21. <dependencies>
  22. <dependency>
  23. <groupId>org.springframework.cloud</groupId>
  24. <artifactId>spring-cloud-config-server</artifactId>
  25. </dependency>
  26. <dependency>
  27. <groupId>org.springframework.boot</groupId>
  28. <artifactId>spring-boot-starter-test</artifactId>
  29. <scope>test</scope>
  30. </dependency>
  31. <dependency>
  32. <groupId>org.springframework.cloud</groupId>
  33. <artifactId>spring-cloud-starter-eureka</artifactId>
  34. </dependency>
  35. </dependencies>
  36. <dependencyManagement>
  37. <dependencies>
  38. <dependency>
  39. <groupId>org.springframework.cloud</groupId>
  40. <artifactId>spring-cloud-dependencies</artifactId>
  41. <version>Camden.SR6</version>
  42. <type>pom</type>
  43. <scope>import</scope>
  44. </dependency>
  45. </dependencies>
  46. </dependencyManagement>
  47. <build>
  48. <plugins>
  49. <plugin>
  50. <groupId>org.springframework.boot</groupId>
  51. <artifactId>spring-boot-maven-plugin</artifactId>
  52. </plugin>
  53. </plugins>
  54. </build>
  55. <repositories>
  56. <repository>
  57. <id>spring-milestones</id>
  58. <name>Spring Milestones</name>
  59. <url>https://repo.spring.io/milestone</url>
  60. <snapshots>
  61. <enabled>false</enabled>
  62. </snapshots>
  63. </repository>
  64. </repositories>
  65. </project>
  66. 1
  67. 2
  68. 3
  69. 4
  70. 5
  71. 6
  72. 7
  73. 8
  74. 9
  75. 10
  76. 11
  77. 12
  78. 13
  79. 14
  80. 15
  81. 16
  82. 17
  83. 18
  84. 19
  85. 20
  86. 21
  87. 22
  88. 23
  89. 24
  90. 25
  91. 26
  92. 27
  93. 28
  94. 29
  95. 30
  96. 31
  97. 32
  98. 33
  99. 34
  100. 35
  101. 36
  102. 37
  103. 38
  104. 39
  105. 40
  106. 41
  107. 42
  108. 43
  109. 44
  110. 45
  111. 46
  112. 47
  113. 48
  114. 49
  115. 50
  116. 51
  117. 52
  118. 53
  119. 54
  120. 55
  121. 56
  122. 57
  123. 58
  124. 59
  125. 60
  126. 61
  127. 62
  128. 63
  129. 64
  130. 65
  131. 66
  132. 67
  133. 68
  134. 69
  135. 70
  136. 71
  137. 72
  138. 73
  139. 74
  140. 75
  141. 76
  142. 77
  143. 78
  144. 79
  145. 80
  146. 81
  147. 1
  148. 2
  149. 3
  150. 4
  151. 5
  152. 6
  153. 7
  154. 8
  155. 9
  156. 10
  157. 11
  158. 12
  159. 13
  160. 14
  161. 15
  162. 16
  163. 17
  164. 18
  165. 19
  166. 20
  167. 21
  168. 22
  169. 23
  170. 24
  171. 25
  172. 26
  173. 27
  174. 28
  175. 29
  176. 30
  177. 31
  178. 32
  179. 33
  180. 34
  181. 35
  182. 36
  183. 37
  184. 38
  185. 39
  186. 40
  187. 41
  188. 42
  189. 43
  190. 44
  191. 45
  192. 46
  193. 47
  194. 48
  195. 49
  196. 50
  197. 51
  198. 52
  199. 53
  200. 54
  201. 55
  202. 56
  203. 57
  204. 58
  205. 59
  206. 60
  207. 61
  208. 62
  209. 63
  210. 64
  211. 65
  212. 66
  213. 67
  214. 68
  215. 69
  216. 70
  217. 71
  218. 72
  219. 73
  220. 74
  221. 75
  222. 76
  223. 77
  224. 78
  225. 79
  226. 80
  227. 81

在程序的入口Application类加上@EnableConfigServer注解开启配置服务器的功能,代码如下:

  1. @SpringBootApplication
  2. @EnableConfigServer
  3. public class ConfigServerApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(ConfigServerApplication.class, args);
  6. }
  7. }
  8. 1
  9. 2
  10. 3
  11. 4
  12. 5
  13. 6
  14. 7
  15. 8
  16. 9
  17. 10
  18. 1
  19. 2
  20. 3
  21. 4
  22. 5
  23. 6
  24. 7
  25. 8
  26. 9
  27. 10

需要在程序的配置文件application.properties文件配置以下:

  1. spring.application.name=config-server
  2. server.port=8888
  3. spring.cloud.config.server.git.uri=https://github.com/forezp/SpringcloudConfig/
  4. spring.cloud.config.server.git.searchPaths=respo
  5. spring.cloud.config.label=master
  6. spring.cloud.config.server.git.username=your username
  7. spring.cloud.config.server.git.password=your password
  8. 1
  9. 2
  10. 3
  11. 4
  12. 5
  13. 6
  14. 7
  15. 8
  16. 9
  17. 10
  18. 11
  19. 1
  20. 2
  21. 3
  22. 4
  23. 5
  24. 6
  25. 7
  26. 8
  27. 9
  28. 10
  29. 11
  • spring.cloud.config.server.git.uri:配置git仓库地址
  • spring.cloud.config.server.git.searchPaths:配置仓库路径
  • spring.cloud.config.label:配置仓库的分支
  • spring.cloud.config.server.git.username:访问git仓库的用户名
  • spring.cloud.config.server.git.password:访问git仓库的用户密码

如果git仓库为公开仓库,可以不填写用户名和密码,如果是私有仓库需要填写,本例子是公开仓库,放心使用。

远程仓库https://github.com/forezp/SpringcloudConfig/ 中有个文件config-client-dev.properties文件中有一个属性:

foo = foo version 3

启动程序:访问http://localhost:8888/foo/dev

  1. {"name":"foo","profiles":["dev"],"label":"master",
  2. "version":"792ffc77c03f4b138d28e89b576900ac5e01a44b","state":null,"propertySources":[]}
  3. 1
  4. 2
  5. 3
  6. 1
  7. 2
  8. 3

证明配置服务中心可以从远程程序获取配置信息。

http请求地址和资源文件映射如下:

  • /{application}/{profile}[/{label}]
  • /{application}-{profile}.yml
  • /{label}/{application}-{profile}.yml
  • /{application}-{profile}.properties
  • /{label}/{application}-{profile}.properties

三、构建一个config client

重新创建一个springboot项目,取名为config-client,其pom文件:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.forezp</groupId>
  5. <artifactId>config-client</artifactId>
  6. <version>0.0.1-SNAPSHOT</version>
  7. <packaging>jar</packaging>
  8. <name>config-client</name>
  9. <description>Demo project for Spring Boot</description>
  10. <parent>
  11. <groupId>org.springframework.boot</groupId>
  12. <artifactId>spring-boot-starter-parent</artifactId>
  13. <version>1.5.2.RELEASE</version>
  14. <relativePath/> <!-- lookup parent from repository -->
  15. </parent>
  16. <properties>
  17. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  18. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  19. <java.version>1.8</java.version>
  20. </properties>
  21. <dependencies>
  22. <dependency>
  23. <groupId>org.springframework.cloud</groupId>
  24. <artifactId>spring-cloud-starter-config</artifactId>
  25. </dependency>
  26. <dependency>
  27. <groupId>org.springframework.boot</groupId>
  28. <artifactId>spring-boot-starter-web</artifactId>
  29. </dependency>
  30. <dependency>
  31. <groupId>org.springframework.boot</groupId>
  32. <artifactId>spring-boot-starter-test</artifactId>
  33. <scope>test</scope>
  34. </dependency>
  35. </dependencies>
  36. <dependencyManagement>
  37. <dependencies>
  38. <dependency>
  39. <groupId>org.springframework.cloud</groupId>
  40. <artifactId>spring-cloud-dependencies</artifactId>
  41. <version>Dalston.RC1</version>
  42. <type>pom</type>
  43. <scope>import</scope>
  44. </dependency>
  45. </dependencies>
  46. </dependencyManagement>
  47. <build>
  48. <plugins>
  49. <plugin>
  50. <groupId>org.springframework.boot</groupId>
  51. <artifactId>spring-boot-maven-plugin</artifactId>
  52. </plugin>
  53. </plugins>
  54. </build>
  55. <repositories>
  56. <repository>
  57. <id>spring-milestones</id>
  58. <name>Spring Milestones</name>
  59. <url>https://repo.spring.io/milestone</url>
  60. <snapshots>
  61. <enabled>false</enabled>
  62. </snapshots>
  63. </repository>
  64. </repositories>
  65. </project>
  66. 1
  67. 2
  68. 3
  69. 4
  70. 5
  71. 6
  72. 7
  73. 8
  74. 9
  75. 10
  76. 11
  77. 12
  78. 13
  79. 14
  80. 15
  81. 16
  82. 17
  83. 18
  84. 19
  85. 20
  86. 21
  87. 22
  88. 23
  89. 24
  90. 25
  91. 26
  92. 27
  93. 28
  94. 29
  95. 30
  96. 31
  97. 32
  98. 33
  99. 34
  100. 35
  101. 36
  102. 37
  103. 38
  104. 39
  105. 40
  106. 41
  107. 42
  108. 43
  109. 44
  110. 45
  111. 46
  112. 47
  113. 48
  114. 49
  115. 50
  116. 51
  117. 52
  118. 53
  119. 54
  120. 55
  121. 56
  122. 57
  123. 58
  124. 59
  125. 60
  126. 61
  127. 62
  128. 63
  129. 64
  130. 65
  131. 66
  132. 67
  133. 68
  134. 69
  135. 70
  136. 71
  137. 72
  138. 73
  139. 74
  140. 75
  141. 76
  142. 77
  143. 78
  144. 79
  145. 80
  146. 1
  147. 2
  148. 3
  149. 4
  150. 5
  151. 6
  152. 7
  153. 8
  154. 9
  155. 10
  156. 11
  157. 12
  158. 13
  159. 14
  160. 15
  161. 16
  162. 17
  163. 18
  164. 19
  165. 20
  166. 21
  167. 22
  168. 23
  169. 24
  170. 25
  171. 26
  172. 27
  173. 28
  174. 29
  175. 30
  176. 31
  177. 32
  178. 33
  179. 34
  180. 35
  181. 36
  182. 37
  183. 38
  184. 39
  185. 40
  186. 41
  187. 42
  188. 43
  189. 44
  190. 45
  191. 46
  192. 47
  193. 48
  194. 49
  195. 50
  196. 51
  197. 52
  198. 53
  199. 54
  200. 55
  201. 56
  202. 57
  203. 58
  204. 59
  205. 60
  206. 61
  207. 62
  208. 63
  209. 64
  210. 65
  211. 66
  212. 67
  213. 68
  214. 69
  215. 70
  216. 71
  217. 72
  218. 73
  219. 74
  220. 75
  221. 76
  222. 77
  223. 78
  224. 79
  225. 80

其配置文件:

  1. spring.application.name=config-client
  2. spring.cloud.config.label=master
  3. spring.cloud.config.profile=dev
  4. spring.cloud.config.uri= http://localhost:8888/
  5. server.port=8881
  6. 1
  7. 2
  8. 3
  9. 4
  10. 5
  11. 6
  12. 1
  13. 2
  14. 3
  15. 4
  16. 5
  17. 6
  • spring.cloud.config.label 指明远程仓库的分支
  • spring.cloud.config.profile

    • dev开发环境配置文件
    • test测试环境
    • pro正式环境
  • spring.cloud.config.uri= http://localhost:8888/ 指明配置服务中心的网址。

程序的入口类,写一个API接口“/hi”,返回从配置中心读取的foo变量的值,代码如下:

  1. @SpringBootApplication
  2. @RestController
  3. public class ConfigClientApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(ConfigClientApplication.class, args);
  6. }
  7. @Value("${foo}")
  8. String foo;
  9. @RequestMapping(value = "/hi")
  10. public String hi(){
  11. return foo;
  12. }
  13. }
  14. 1
  15. 2
  16. 3
  17. 4
  18. 5
  19. 6
  20. 7
  21. 8
  22. 9
  23. 10
  24. 11
  25. 12
  26. 13
  27. 14
  28. 15
  29. 16
  30. 17
  31. 1
  32. 2
  33. 3
  34. 4
  35. 5
  36. 6
  37. 7
  38. 8
  39. 9
  40. 10
  41. 11
  42. 12
  43. 13
  44. 14
  45. 15
  46. 16
  47. 17

打开网址访问:http://localhost:8881/hi,网页显示:

foo version 3

这就说明,config-client从config-server获取了foo的属性,而config-server是从git仓库读取的,如图:

Azure (2).png

本文源码下载:
https://github.com/forezp/SpringCloudLearning/tree/master/chapter6

四、参考资料

spring_cloud_config

发表评论

表情:
评论列表 (有 0 条评论,245人围观)

还没有评论,来说两句吧...

相关阅读