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

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

发布了244 篇原创文章 · 获赞 799 · 访问量 234万+
展开阅读全文

关于spring-cloud-config配置中心问题,配置可以被查询,但不能被客户端读取。

09-03

自学spring cloud 遇到难点,有些东西不是特别理解希望有大佬看到能给予一下帮助,不胜感激。 在学习配置中心文件代码如下 application.yml ``` spring: cloud: config: server: native: search-locations: classpath:/config profiles: active: native # git: # uri: https://gitee.com/zhongzunfa/spring-cloud-config.git # search-paths: V1-DEV application: name: config-server server: port: 9092 #启动端口 ``` config文件包含如下内容 ``` spring: gfp: name: "gfp" sex: 1 age: 18 ``` 可在浏览器中输入地址:http://localhost:9092/author/spring 查看到对应信息 ![图片说明](https://img-ask.csdn.net/upload/201809/03/1535976477_498619.png) 在客户端中配置类如下两个配置文件 bootstrap.yml ``` spring: cloud: config: label: master uri: http://localhost:9092/author/spring name: author ``` application.yml ``` spring: application: name: config-client-consumer server: port: 9093 ``` 再对应的属性注入部分为如下设置 ``` @Component @ConfigurationProperties(prefix = "spring.gfp") public class AuthorConfig { private String name; private Integer age; private Integer sex; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Integer getSex() { return sex; } public void setSex(Integer sex) { this.sex = sex; } @Override public String toString() { return "AuthorConfig{" + "name='" + name + '\'' + ", age=" + age + ", sex=" + sex + '}'; } ``` 抛出异常为如下,非常不解如何设置, ``` com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: connect at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187) ~[jersey-apache-client4-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.filter.GZIPContentEncodingFilter.handle(GZIPContentEncodingFilter.java:123) ~[jersey-client-1.19.1.jar:1.19.1] at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27) ~[eureka-client-1.9.2.jar:1.9.2] at com.sun.jersey.api.client.Client.handle(Client.java:652) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) ~[jersey-client-1.19.1.jar:1.19.1] at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:509) ~[jersey-client-1.19.1.jar:1.19.1] at com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient.getApplicationsInternal(AbstractJerseyEurekaHttpClient.java:194) ~[eureka-client-1.9.2.jar:1.9.2] at com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient.getApplications(AbstractJerseyEurekaHttpClient.java:165) ~[eureka-client-1.9.2.jar:1.9.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$6.execute(EurekaHttpClientDecorator.java:137) [eureka-client-1.9.2.jar:1.9.2] at com.netflix.discovery.shared.transport.decorator.MetricsCollectingEurekaHttpClient.execute(MetricsCollectingEurekaHttpClient.java:73) ~[eureka-client-1.9.2.jar:1.9.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) [eureka-client-1.9.2.jar:1.9.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$6.execute(EurekaHttpClientDecorator.java:137) [eureka-client-1.9.2.jar:1.9.2] at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.executeOnNewServer(RedirectingEurekaHttpClient.java:118) ~[eureka-client-1.9.2.jar:1.9.2] at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.execute(RedirectingEurekaHttpClient.java:79) ~[eureka-client-1.9.2.jar:1.9.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) [eureka-client-1.9.2.jar:1.9.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$6.execute(EurekaHttpClientDecorator.java:137) [eureka-client-1.9.2.jar:1.9.2] at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:120) [eureka-client-1.9.2.jar:1.9.2] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) [eureka-client-1.9.2.jar:1.9.2] ``` 问答

spring cloud config刷新client配置问题

03-27

如题: 我们都知道,spring cloud config消息总线分服务端(简称server)和客户端(简称client),如果我们要对client的一些配置信息做修改时,只需要在git上修改对应client的配置文件,然后使用Post方式调用server的/bus/refresh?destinace=clientName:clientPort即可达到热更新的效果,但是我在使用过程中发现,并非client的所有配置都可以使用这样的方式进行热更新,所以,到底可以更新client的哪些配置我目前还是迷糊中的。 我现在有一个demo,server的配置文件或者我配置的是git,client的环境有两个版本,一个是开发版,即dev,还有一个是测试版本,即test,这两个版本中,其中有一个配置不一样,那就是数据库的连接,开发版本有开发数据库,测试版本有测试数据库,所以我希望使用spring cloud config server来进行client的数据库配置更新,client项目中只一个bootstrap.yml文件,里面只配置了eureka,zipkin,config的相关信息,这部分是不会变的,client的数据库配置和其他配置是放在git上的,当我在git上修改了client的数据库配置,比如url,然后调用server的/bus/refresh接口,观察到client确实是刷新了spring.datasource.url信息,项目本身没有报错,但是当我通过client的接口获取数据库名的时候,发现获取到的还是refresh之前的数据库名,并非我在git上配置的数据库,配置jdbcTemplate是直接使用springboot默认的配置,没有手动申明druidDataSource和jdbcTemplate(经过测试就算手动配置也是一样的结果),我已经在dao层加入了@RefreshScope注解 请问各路大神,这个问题如何解决呢? 另外还有一个问题,我想把logback的配置文件也放到git上,然后通过server来refresh client的logback日志配置信息,这个又应该如何实现? 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 代码科技 设计师: Amelia_0503

分享到微信朋友圈

×

扫一扫,手机浏览