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

Spring云配置双引导文件行为

仲孙绍元
2023-03-14

我有一个设置,我正在使用以下内容:

  • Spring靴1.5。13使用Spring云版本Edgware。S3
  • 我有Spring云配置服务器,我的Spring启动应用程序是它的客户端
  • 每个应用程序都有一个引导程序。带有配置服务器uri和一些其他属性的yml
  • 在码头工人群上运行集装箱

我目前正在通过一个自定义脚本将Swarm secrets传递给客户端,该脚本读取放入/run/secrets/中的文件,并创建一个/config/bootstrap。属性文件。结果是这样的:

spring.cloud.config.username=user
spring.cloud.config.password=password

我的Docker映像的默认命令是:

java -Djava.security.egd=file:/dev/./urandom -jar /${appName}.jar --spring.cloud.bootstrap.location=file:/config/bootstrap.properties"

伟大的这是工作没有问题。该应用程序看起来是这样的:

  • 外部引导。要在配置服务器的凭据中读取的属性
  • 类路径引导。yml读取配置客户端道具的其余部分
  • 获取并读取配置服务器的应用程序appName。yml
  • 然后读取绑定的应用程序。来自类路径的yml

现在我正在将应用程序迁移到SpringBoot2.0。3和芬奇利。释放,好吧,这就打破了。

现在发生的是:

  • 外部引导。读取属性以获取配置服务器的凭据

问题是在内部引导中设置的属性。该应用程序现在缺少yml,因此它在启动时会爆炸。通过做同样的事情,我能够在容器环境之外复制它;将应用程序指向外部引导。财产。如果我通过引导复制。将yml属性导入引导程序。属性,那么它就可以正常工作了。另外,如果我没有提供外部属性文件,那么内部引导程序将被删除。yml毫无问题地开始工作。所以不是一个就是另一个!

我还尝试修改引导位置以包括默认位置,但没有成功:

-- spring.cloud.bootstrap.location=file:/config/bootstrap.properties,classpath:,classpath:/config,file:,file:config/

知道下一步去哪里找吗?也许我错过了一个新的spring.cloud.config?或者有人能确认哪个行为是正确的行为吗?假设他们修复了芬奇利的一个潜在漏洞,那么我就可以把它搁置起来,寻找另一个解决方案。如果它在芬奇利“坏了”,我想一份问题报告是合适的?

共有1个答案

乐正穆冉
2023-03-14

嗯,进一步的挖掘表明,这似乎是一种新的行为:

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guide

Spring的行为。配置。位置配置已固定;它以前在默认位置列表中添加了一个位置,现在替换默认位置。如果您依赖于以前处理它的方式,那么现在应该使用spring。配置。而不是其他位置。

它看起来不像春云,但我没有什么可失去的。更改我的java命令来使用这个新属性做到了这一点:

--spring.config.additional-location=file:/config/bootstrap.properties

谢谢。

 类似资料:
  • 我有一个带应用程序的spring boot应用程序。属性文件和spring数据jpa。在应用程序中,我有一个外部依赖项,需要加载外部Spring项目的bean,该项目具有基于xml的配置。外部xml有自己的组件扫描和spring jpa设置,可以与应用程序中提供该DB属性的其他DB进行交互。属性文件,我正在使用@ImportResources将其bean注入父应用程序。但是,当我在做这个sprin

  • ConfigurationProperties或值注释不起作用。

  • 从这份官方文件中,很难确定这两个模块之间有什么区别。 谁能提供一个官方和规范的答案来解释两者的区别吗?

  • 我刚刚将我们的Spring Boot项目从引导升级到v2.6.2,从Spring Cloud升级到2021.0.0。 现在,我的远程配置获取没有任何效果,应用程序也无法获取正确的属性文件 [main]INFO o. s. c. c. c. ConfigServiceProperty tySourceLocator-从服务器获取配置:http://localhost:8080 [main]WARN

  • 我们的Ops人员希望在应用程序启动时将Spring Boot配置(即所有属性)转储到日志文件中。我假设这可以通过使用annotation@ConfigurationProperties注入属性并打印它们来实现。 问题是是否有更好或内置的机制来实现这一目标。 考虑到似乎并没有一个内置的解决方案,除此之外,我还试着自己做饭。以下是我的想法: 这样做的挑战在于它不会打印application.yml中的

  • 我目前正在开发一个定制的配置客户端,比如SpringCloud配置客户端。原因是SpringCloudConfigClient在我的特殊情况下没有涵盖一些特殊情况。 为此,像SpringCloudConfigClient一样,我使用的是SpringCloudContext。正如我所看到的,SpringCloudConfigClient在引导阶段加载其配置,但我看不出原因。 在我的自定义配置客户机中