Spring Cloud Config的配置中心获取不到最新配置信息的问题

问题描述

1、 Spring Cloud Config的配置中心,修改了配置信息,微服务没有及时更新。git远程仓库设有密码
2、Spring Cloud Config的配置中心在运行一段时间之后,发现修改了配置信息,但是微服务应用并拿不到新的配置内容。同时,发现配置中心存储配置的目录/tmp 的配置内容被清空了。

原因

问题一

配置账号密码,下面会给出代码。

问题二

这里主要分析一下问题二

微服务从配置中心获取配置信息的时候获取不到最新的配置,其根本原因就是在/tmp目录下的缓存仓库已经被清空了,所以导致无法正常的通过Git获取到最新配置,那么自然各个微服务应用就无法获取最新配置了。

其实该问题在Spring Cloud的官方文档中也有对应的说明,原文如下:

With VCS based backends (git, svn) files are checked out or cloned to the local filesystem. By default they are put in the system temporary directory with a prefix of config-repo-. On linux, for example it could be /tmp/config-repo-. Some operating systems routinely clean out temporary directories. This can lead to unexpected behaviour such as missing properties. To avoid this problem, change the directory Config Server uses, by setting spring.cloud.config.server.git.basedir or spring.cloud.config.server.svn.basedir to a directory that does not reside in the system temp structure.

根据上面的内容,我们可以知道在某些系统中,对于/tmp目录进行周期性的清理,所以也就有了上面所说的问题。

从文档中我们也已经知道如果去解决该问题,是通过

spring.cloud.config.server.git.basedir 
spring.cloud.config.server.svn.basedir

来指定一个不会被定期清理的目录。

解决

spring:
  cloud:
    config:
      enabled: true
      server:
        git:
          uri: https://github.com/xxxx
          search-paths: config  #设置路径
          basedir: config-repo  
          username: 2016xxxx@qq.com #账号
          password: 888888  #密码
        bootstrap: true

参考:

史上最简单的SpringCloud教程 | 第七篇: 高可用的分布式配置中心(Spring Cloud Config)
Spring Cloud Config的配置中心获取不到最新配置信息的问题
Spring Cloud Config

关注我的公众号,轻松了解和学习更多技术
这里写图片描述

git上的配置文件: eureka_service_config_application.yml  (仓库名 springCloud_Config   此yml文件不再任何文件夹下) localhost-8761 已在本地 host文件配置过    本yml文件配置在eurekaservice模块 appliaction.yml启动成功   但是放到git读取就出错了 - ``` server: port: 8761 spring: application: name: eureka_service_config_application profiles: test eureka: instance: hostname: localhost-8761 #eureka实例的主机名 client: register-with-eureka: false # 不把自己注册到eureka fetch-registry: false #不从eureka上来获取服务的注册信息,表示自己就是注册中心,我的职责是维护服务实例,并不需要检索服务 service-url: defaultZone: http://localhost-8761:8761/eureka/ --- server: port: 8762 spring: application: name: eureka_service_config_application2 profiles: dev eureka: instance: hostname: localhost-8762 #eureka实例的主机名 client: register-with-eureka: false # 不把自己注册到eureka fetch-registry: false #不从eureka上来获取服务的注册信息,表示自己就是注册中心,我的职责是维护服务实例,并不需要检索服务 service-url: defaultZone: http://localhost-8762:8762/eureka/ ``` --- 1.配置config中心模块一(模块名 springCloudConfig) ``` server: port: 3344 spring: application: name: springCloudConfig cloud: config: server: git: uri: https://gitee.com/ykmy123/springCloud_Config.git #search-paths: /resources #配置文件所在的文件位置 如果是多文件可用"," 隔开 username: xxxxx password: xxxxx ``` --- 并在主启动类上添加了注解 @EnableConfigServer --- 2.创建一个模块二(springCloudConfigClien)测试是否拉取到信息 bootstrap.yml ``` spring: cloud: config: name: eureka_service_config_application #需要从github上读取的资源名,注意没有yml后缀 profile: test #本访问的配置项 label: master #读取的分支 uri: http://localhost:3344 #本微服务启动后会通过3344号服务,通过springCloudConfig获取github的服务 ``` controller ``` @RestController public class ConfigClientRest { @Value("${spring.application.name}") private String applicationName; @Value("${eureka.client.service-url.defaultZone}") private String eurekaServers; @Value("${server.port}") private String port; @RequestMapping(value="/getConfig", method= RequestMethod.GET) public String getConfig(){ String str="applicationName:"+applicationName+"\t eurekaServers:"+eurekaServers+"\t port:"+port; System.out.println(str); return "applicationName:"+applicationName+"\t eurekaServers:"+eurekaServers+"\t port:"+port; } } ``` 启动 ![图片说明](https://img-ask.csdn.net/upload/202005/21/1590034936_788362.png) 并访问 ![图片说明](https://img-ask.csdn.net/upload/202005/21/1590035035_165212.png) --- 3.创建eurekaservice 模块三(eureka容器) bootstrap.yml ``` spring: cloud: config: name: eureka_service_config_application #需要从github上读取的资源名,注意没有yml后缀 profile: test #本访问的配置项 label: master #读取的分支 uri: http://localhost:3344 #本微服务启动后会通过3344号服务,通过springCloudConfig获取github的服务 ``` --------- application.yml ``` spring: application: name: eureka_service_config_application ``` ------- 主启动类添加 @EnableEurekaServer 启动配置中心 模块 springCloudConfig (已经把上边的模块二给关掉了) 启动eurekaservice 模块提示报错 ![图片说明](https://img-ask.csdn.net/upload/202005/21/1590035468_590974.png) ----- 到这里创建了eurekaservice模块也想着拉取一下配置文件就出现一下疑问: --- 1.读git配置文件到项目的配置搭建思路是否有问题 2.为何模块一后 启动模块二端口是8761 可以读取到 git配置信息 (端口8761 ;而启动模块一后启动模块三 是就会报错  配置信息未读取到自动改为默认端口8080;   那模块一和模块三 配置文件都一样 按道理可以向模块二一样拉取到信息啊(个人认为可以拉取到) 3 模块二与模块三都是springboot项目  唯一不同的就是  模块二不是 eureka容器 求大神指点一下 非常感谢
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:设计师小姐姐 返回首页