服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|JavaScript|易语言|

服务器之家 - 编程语言 - Java教程 - 解决SpringCloud Config结合github无法读取配置的问题

解决SpringCloud Config结合github无法读取配置的问题

2021-08-13 14:10esunlang Java教程

这篇文章主要介绍了解决SpringCloud Config结合github无法读取配置的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

前言

配置中心存放文件在github是读取过程,可能你会出现读取不到配置信息。本次笔者将这一过程进行详细介绍。

准备

父工程

由于笔者是使用聚合工程,所以这次也是把相关的工程创建说明写上。当然你也可以完全创建两个独立的工程来引用。

创建父工程时直接只有一个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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <packaging>pom</packaging>
  6. <modules>
  7. <module>ch2-2-eureka-client</module>
  8. <module>ch2-3-config-server</module>
  9. <module>ch4-1-feign</module>
  10. <module>ch5-1-zuul</module>
  11. <module>config-client</module>
  12. </modules>
  13. <parent>
  14. <groupId>org.springframework.boot</groupId>
  15. <artifactId>spring-boot-starter-parent</artifactId>
  16. <version>2.0.2.RELEASE</version>
  17. </parent>
  18. <groupId>com.example</groupId>
  19. <artifactId>ch2-1</artifactId>
  20. <version>0.0.1-SNAPSHOT</version>
  21. <name>ch2-1</name>
  22. <description>eureka</description>
  23. <properties>
  24. <java.version>1.8</java.version>
  25. </properties>
  26. <dependencyManagement>
  27. <dependencies>
  28. <dependency>
  29. <groupId>org.springframework.cloud</groupId>
  30. <artifactId>spring-cloud-dependencies</artifactId>
  31. <version>Finchley.RELEASE</version>
  32. <type>pom</type>
  33. <scope>import</scope>
  34. </dependency>
  35. </dependencies>
  36. </dependencyManagement>
  37. <dependencies>
  38. <dependency>
  39. <groupId>org.springframework.boot</groupId>
  40. <artifactId>spring-boot-starter-web</artifactId>
  41. </dependency>
  42. <dependency>
  43. <groupId>org.springframework.boot</groupId>
  44. <artifactId>spring-boot-starter-test</artifactId>
  45. <scope>test</scope>
  46. </dependency>
  47. </dependencies>
  48. </project>

子工程-config-server

这个工程内容目录如下图

解决SpringCloud Config结合github无法读取配置的问题

依赖

由于在父工程已经引入了WEB,所以这里只引入spring-cloud-config-server,另外一个spring-boot-starter-actuator主要是用来查看端点信息的,可以不引用,后续手机刷新时需要这个开启相关的访问端点(好像是,具体后续可能有相关文章再细说)

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>ch2-1</artifactId>
  7. <groupId>com.example</groupId>
  8. <version>0.0.1-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11. <artifactId>ch2-3-config-server</artifactId>
  12. <dependencies>
  13. <dependency>
  14. <groupId>org.springframework.cloud</groupId>
  15. <artifactId>spring-cloud-config-server</artifactId>
  16. </dependency>
  17. <dependency>
  18. <groupId>org.springframework.boot</groupId>
  19. <artifactId>spring-boot-starter-actuator</artifactId>
  20. </dependency>
  21. </dependencies>
  22. </project>

启动主类

  1. package springcloud;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.cloud.config.server.EnableConfigServer;
  5. @SpringBootApplication
  6. //只加这个即可,表示这个启动的是config的服务中心
  7. @EnableConfigServer
  8. public class Ch21ConfigServerApplication {
  9. public static void main(String[] args) {
  10. SpringApplication.run(Ch21ConfigServerApplication.class, args);
  11. }
  12. }

配置文件

服务端的配置不需要注意什么的,按下面的配置即可,因为默认是git的,所以不需要写profiles 指向git了

  1. server:
  2. port: 9090
  3. spring:
  4. application:
  5. name: config-server
  6. cloud:
  7. config:
  8. server:
  9. git:
  10. uri: https://github.com/xxx1/xxx2.git
  11. #xxx2 是指存放当前配置文件的仓库名
  12. username: 写自己的github账号
  13. password: 写自己的github密码

启动项目后,访问http://localhost:9090/config/dev/main 即可以看到配置信息 这个地址要注意的是 http://localhost:9090/{配置文件名前缀}/{环境类型}/{仓库分支标签}

如在仓库创建的文件名为config-dev.yml,那么配置文件名前缀就是config,环境就是指文件名后缀 dev,仓库标签就是当前存放文件的仓库分支名

看到以下信息说明启动项目且配置获取成功

解决SpringCloud Config结合github无法读取配置的问题

子工程-config-client

子工程就是个问题了,当时创建时一直无法读取配置信息就是子工程这里出现的问题,有两个问题觉得要说明的,先看下子工程创建过程。

pom文件

  1. ```xml
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <project xmlns="http://maven.apache.org/POM/4.0.0"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  6. <parent>
  7. <artifactId>ch2-1</artifactId>
  8. <groupId>com.example</groupId>
  9. <version>0.0.1-SNAPSHOT</version>
  10. </parent>
  11. <modelVersion>4.0.0</modelVersion>
  12. <groupId>ch2.springcloud</groupId>
  13. <artifactId>config-client</artifactId>
  14. <version>0.0.1-SNAPSHOT</version>
  15. <dependencies>
  16. <dependency>
  17. <groupId>org.springframework.cloud</groupId>
  18. <artifactId>spring-cloud-config-client</artifactId>
  19. </dependency>
  20. </dependencies>
  21. </project>

启动类

  1. package cn.springcloud;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. @SpringBootApplication
  5. public class ClientApplication {
  6. public static void main(String[] args) {
  7. SpringApplication.run(ClientApplication.class,args);
  8. }
  9. }

配置类或者通过@Value获取配置信息说明

  1. package cn.springcloud.config;
  2. import org.springframework.boot.context.properties.ConfigurationProperties;
  3. import org.springframework.stereotype.Component;
  4. @Component
  5. @ConfigurationProperties(prefix = "cn.springcloud.book")
  6. public class ConfigInfoProperties {
  7. private String config;
  8. public String getConfig() {
  9. return config;
  10. }
  11. public void setConfig(String config) {
  12. this.config = config;
  13. }
  14. }

测试类Controller

这个类写了两个获取配置信息的方式,一个是通过@Autowired注入配置类,一个是通过@Value来获取

  1. package cn.springcloud.controller;
  2. import cn.springcloud.config.ConfigInfoProperties;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.beans.factory.annotation.Value;
  5. import org.springframework.web.bind.annotation.GetMapping;
  6. import org.springframework.web.bind.annotation.RestController;
  7. @RestController
  8. public class ConfigController {
  9. @Autowired
  10. private ConfigInfoProperties configInfoProperties;
  11. @Value("${demo.value}")
  12. private String value;
  13. @GetMapping("/getmsg")
  14. public String getMsg(){
  15. System.out.println("value: "+value);
  16. System.out.println("this config is: "+configInfoProperties.getConfig());
  17. return configInfoProperties.getConfig();
  18. }
  19. }

配置文件

这里的配置文件就是一个问题点了,配置如下启动时会先摘取配置信息再启动,所以把配置中心的配置放到bootstrap.yml中

问题:label: main 这个是指配置指向当前创建的分支,如果没有则默认是master,网上就是这样说的,后来发现,现在的直接在github创建仓库后,显示的是main,所以当时我没有配置或者配置成master时一直获取不了配置信息,所以重新查看了仓库信息,如下图:

解决SpringCloud Config结合github无法读取配置的问题

bootstrap.yml说明:

  1. spring:
  2. cloud:
  3. config:
  4. label: main
  5. uri: http://localhost:9090
  6. name: config
  7. profile: dev

application.yml说明

  1. server:
  2. port: 9000
  3. spring:
  4. application:
  5. name: config-client

另一个问题

配置了配置中心的URL,即上面bootstrap.yml中的 uri: http://localhost:9090,但是项目一直启动的是访问 uri: http://localhost:8888,当时就纳闷,找了很久都没有找到在哪里配置了8888,后来又是清缓存,还是不行,最后在client添加server依赖包,再重启,结果发现正常了,正常后又把它删除,也正常了。

  1. org.springframework.cloud
  2. spring-cloud-config-server

从github拉取的文件在本地存放的目录

如果你不知道文件在哪里,在启动server时又显示了以下信息,则说明文件是拉取到本地了:

解决SpringCloud Config结合github无法读取配置的问题

当前你也可以直接在电脑上查找文件名,看到以下类似目录即可以找到

解决SpringCloud Config结合github无法读取配置的问题

不知道能不能指定目录的,这个读者可以试下

测试结果

启动server client,访问client提供的接口localhost:9000/getmsg

解决SpringCloud Config结合github无法读取配置的问题

结果如图,说明正常获取信息了

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

原文链接:https://blog.csdn.net/esunlang/article/details/113791467

延伸 · 阅读

精彩推荐