SpringCloud Hoxton.SR3版本 配置中心config搭建教程

谁借莪1个温暖的怀抱¢ 2023-07-22 14:25 236阅读 0赞

引言

最近在搭建配置中心的时候遇到了很多问题,因为刚开始接触springcloud 对里面的很多只是并不是很了解,但是看了文档以后觉得 应该是很简单的,结果在搭建过程中都是大坑啊。下面先介绍正确的配置过程,然后在分享其中遇到的坑。

项目版本

spring-boot-version:2.2.5.RELEASE

spring-cloud.version:Hoxton.SR3

注意:spring cloud 不同版本之间的差异还是很大的,所以读者一定要注意自己的版本

本文中的实例采用maven+父子工程的结构来实现,client端和server端拥有相同的父工程。

父工程搭建

关于如何创建工程这里就不介绍了,父工程中最为关键的部分就是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"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.2.5.RELEASE</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.jack.springcloud</groupId>
  12. <artifactId>weather</artifactId>
  13. <version>1.0-SNAPSHOT</version>
  14. <packaging>pom</packaging>
  15. <modules>
  16. <module>weatherconfigserver</module>
  17. <module>weatherconfigclient</module>
  18. </modules>
  19. <name>weather</name>
  20. <!-- FIXME change it to the project's website -->
  21. <url>http://www.example.com</url>
  22. <properties>
  23. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  24. <java.source.level>1.8</java.source.level>
  25. <java.target.level>1.8</java.target.level>
  26. <maven.compiler.source>1.7</maven.compiler.source>
  27. <maven.compiler.target>1.7</maven.compiler.target>
  28. <maven.compiler.plugin.version>3.3</maven.compiler.plugin.version>
  29. <spring.cloud.version>Hoxton.SR3</spring.cloud.version>
  30. </properties>
  31. <dependencies>
  32. <dependency>
  33. <groupId>org.springframework.cloud</groupId>
  34. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  35. </dependency>
  36. <!-- Spring Cloud 负载均衡组件-->
  37. <dependency>
  38. <groupId>org.springframework.cloud</groupId>
  39. <artifactId>spring-cloud-starter-openfeign</artifactId>
  40. </dependency>
  41. <!--Spring Cloud 负载均衡组件-->
  42. <dependency>
  43. <groupId>org.springframework.cloud</groupId>
  44. <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
  45. </dependency>
  46. <!--Spring Cloud 配置组件-->
  47. <dependency>
  48. <groupId>junit</groupId>
  49. <artifactId>junit</artifactId>
  50. <version>4.12</version>
  51. <scope>test</scope>
  52. </dependency>
  53. </dependencies>
  54. <dependencyManagement>
  55. <dependencies>
  56. <dependency>
  57. <groupId>org.springframework.cloud</groupId>
  58. <artifactId>spring-cloud-dependencies</artifactId>
  59. <version>${spring.cloud.version}</version>
  60. <type>pom</type>
  61. <scope>import</scope>
  62. </dependency>
  63. </dependencies>
  64. </dependencyManagement>
  65. <!--仓库配置-->
  66. <repositories>
  67. <repository>
  68. <id>spring-snapshots</id>
  69. <name>Spring Snapshots</name>
  70. <url>https://repo.spring.io/snapshot</url>
  71. <snapshots>
  72. <enabled>true</enabled>
  73. </snapshots>
  74. </repository>
  75. <repository>
  76. <id>spring-milestones</id>
  77. <name>Spring Milestones</name>
  78. <url>https://repo.spring.io/milestone</url>
  79. <snapshots>
  80. <enabled>false</enabled>
  81. </snapshots>
  82. </repository>
  83. </repositories>
  84. <build>
  85. <plugins>
  86. <plugin>
  87. <groupId>org.apache.maven.plugins</groupId>
  88. <artifactId>maven-compiler-plugin</artifactId>
  89. <version>${maven.compiler.plugin.version}</version>
  90. <configuration>
  91. <source>${java.source.level}</source>
  92. <target>${java.target.level}</target>
  93. <encoding>${project.build.sourceEncoding}</encoding>
  94. <skip>true</skip>
  95. </configuration>
  96. </plugin>
  97. </plugins>
  98. </build>
  99. </project>

ConfiServer服务端搭建

在idea中我们选择新建model 然后选择 Spring Initializr 即可。

1、pom文件中主要修改parent为我们自己的父工程,然后在pom中增加confi-server的配置

  1. <parent>
  2. <groupId>com.jack.springcloud</groupId>
  3. <artifactId>weather</artifactId>
  4. <version>1.0-SNAPSHOT</version>
  5. </parent>
  6. <dependency>
  7. <groupId>org.springframework.cloud</groupId>
  8. <artifactId>spring-cloud-config-server</artifactId>
  9. </dependency>

2、在启动类上 增加configserver开启注解

  1. @SpringBootApplication
  2. @EnableConfigServer
  3. public class WeatherconfigserverApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(WeatherconfigserverApplication.class, args);
  6. }
  7. }

3、配置文件配置

  1. spring.application.name: micro-weather-config-server
  2. server.port= 8809
  3. #github仓库地址
  4. spring.cloud.config.server.git.uri=https://github.com/zhenghaoxiao/springcloudconfig
  5. #存放配置的目录名称
  6. spring.cloud.config.server.git.searchPaths=rpo

注意:端口不能用8888

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTMwNDU0Mzc_size_16_color_FFFFFF_t_70
关于github上文件的说明,在我们搭建完client以后一起介绍说明

ConfigClient端搭建

client端非常 简单就是一个普通 springboot工程,不用增加额外的注解

1、配置文件配置,注意配置文件名称为bootstrap.properties

  1. server.port=8006
  2. spring.application.name=micro-weather-config-client
  3. spring.cloud.config.label=master
  4. spring.cloud.config.profile=dev
  5. spring.cloud.config.uri=http://localhost:8809/

2、测试代码

  1. @Service
  2. public class HelloService {
  3. @Value("${auther}")
  4. private String auther;
  5. public String hello() {
  6. return auther;
  7. }
  8. }

github上配置文件名称规则

springcloud config 的URL与配置文件的映射关系如下:

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

上面的url会映射{application}-{profile}.properties对应的配置文件,{label}对应git上不同的分支,默认为master。

所以github上文件的名称为:micro-weather-config-client-dev.properties

到这里整个config 的搭建就完成了,下面我们开始测试一下

1、首先启动server

如果server启动成功, 他会将github远程服务器上的配置文件同步到 本地一份,本地文件存储位置为

Windows默认临时目录:C:\Users\wyb\AppData\Local\Temp

Linux默认临时目录:/tmp

该配置项可根据该配置项进行调整

  1. spring.cloud.config.server.git.basedir=指定目录

到该目录下面检查是否有新建的以config-repo-xxxxx开头的目录,有的话说明服务端Git配置这块没有问题。

2、启动客户端

如果客户端能正常启动,没有提示注入失败,

Could not resolve placeholder ‘auther’ in value “${auther}“

那就说明搭建成功了,当然也可以将配置中的内容 返回到页面进行检验。

下面分享一下搭建过程中坑

1、将client 端和server的依赖都放在父pom中引用, 导致项目失败。我们需要在各个model中单独依赖个字的依赖项

2、client端配置文件使用了application.properties,没有使用bootstrap.properties导致失败

3、服务端使用了8888端口,client端使用bootstrap.properties文件名称, 导致项目失败

上面是一些导致失败的原因,现在还不是非常清楚其中导致失败的原理,随着学习的深入会陆续解析其中的原因。如果你也遇到不同的问题,欢迎留言交流。

发表评论

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

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

相关阅读