当前位置: 首页 > 知识库问答 >
问题:

Spring boot 2.4.x无法处理来自配置服务器的多文档yml文件

姬奇思
2023-03-14
  1. Java版本:8
  2. Spring启动版本:2.4.1
  3. Spring Cloud Version:2020.0.0,具体来说,我使用连接到GIT的Spring Cloud Config服务器,我们的服务是Spring Cloud Config客户机。
server.port: 9001
spring:
  application.name: my-rest-service
  config.import: configserver:http://localhost:8888
  cloud.config.profile: ${spring.profiles.active}

配置服务器中的配置如下所示:

yml(有两个文档由---分隔)

logging:
  file.name: <omitted>
  level:
    root: INFO
---
spring:
  config.activate.on-profile: dev
  logging.level.root: DEBUG

my-rest-sercive.yml(有两个文档由---分隔)

spring:
  datasource:
    driver-class-name: <omitted>
    username: <omitted>
    password: <omitted>
---
spring:
  config.activate.on-profile: dev
  datasource.url: <omitted>
    null
o.s.b.c.config.ConfigDataEnvironment     : Adding imported property source 'configserver:https://git.company.com/path.git/file:C:\configservergit\config\my-rest-service.yml'
o.s.b.c.config.ConfigDataEnvironment     : Adding imported property source 'configserver:https://git.company.com/path.git/file:C:\configservergit\config\my-rest-service.yml'
o.s.b.c.config.ConfigDataEnvironment     : Adding imported property source 'configserver:https://git.company.com/path.git/file:C:\configservergit\config\application.yml'
o.s.b.c.config.ConfigDataEnvironment     : Adding imported property source 'configserver:https://git.company.com/path.git/file:C:\configservergit\config\application.yml'
public void addLast(PropertySource<?> propertySource) {
    synchronized(this.propertySourceList) {
        this.removeIfPresent(propertySource); <-- this is the culrprit!
        this.propertySourceList.add(propertySource);
    }
} 

与Spring2.3/Spring Cloud Hoxton相比,这是一个突破性的变化,它正确地收集了所有属性。我认为spring cloud需要更改配置服务器,以便yml中的每个文档在返回spring时都有一个唯一的名称。这正是Spring Boot处理多文档yml文件的方式,方法是将字符串(documenyt#1)附加到属性源名称

我发现了一个关于概要文件和多文档yml的有趣说明,基本上是说它不受支持,但这不适用于我的用例,因为我的yml文件不是基于概要文件的(文件名的最后部分没有-{profileName})。

共有1个答案

谯振国
2023-03-14

这是新版本中的一个已知问题。我们可以在spring cloud config server github页面上跟踪这个问题。

解决办法似乎是停止使用多文档yml文件,并使用文件名中带有配置文件名的多个不同文件。

 类似资料:
  • 那么,我该如何应用一个方法将字符串值转换为long呢?

  • 2022-07-05 17:24:53.527 WARN 6444 --- [ main]ConfigServletWebServerApplication Context:上下文初始化过程中遇到的异常-取消刷新尝试:org.springframework.beans.factory.BeanDefinitionStoreException:无法处理配置类[springfox.documentat

  • 部署配置文件是 Puppet 最常见的用途之一。许多服务都需要一些配置文件, 你可以让 Puppet 使用 file 资源将这些配置文件推送到客户端,如下面的代码所示: file { "/opt/nginx/conf.d/app_production.conf": source => "puppet:///modules/app/app_production.conf", } source

  • 我已经为我的服务器创建了一个经济插件,它工作得很好。玩家可以输入 /bal 并查看他们的余额。我的服务器还有一个GUI插件,其中一个选项是查看它们的货币。我将玩家的货币存储在我的经济插件的 config.yml 文件中。如何访问我的经济配置.yml 中的变量,如果我想从另一个插件访问它们?我搜索了整个互联网,什么也没找到。如果有人对如何做到这一点有任何想法,请告诉我。谢谢。

  • 我正在尝试使用两种不同的方式构建一个Docker flink容器,通过Dockerfile和Docker撰写。Dockerfile工作正常,但是我在Docker撰写方面遇到了一些麻烦。 当我执行一个yml文件时,经过一点研究(如果我理解正确的话),docker检查将要使用的服务,并验证所需的图像是否被拉取,如果其中任何一个丢失,docker启动拉取过程。问题是默认情况下,docker拉取图像:最新