【问题标题】:Spring not looking in the Config subfolderSpring 不在 Config 子文件夹中查找
【发布时间】:2021-07-03 06:47:27
【问题描述】:

我是 Springboot 新手,在外部化我的属性文件时遇到了麻烦。 我有多个“.properties”文件保存在子目录“config/”中。我已经从我的项目中删除了上下文占位符,并在执行 jar 时包含了逗号分隔的属性文件。

例如。 java -jar myjar.jar --spring.config.location=file:////config/PROP1.properties, file:///config/PROP2.properties -debug

我有几个问题

  1. 为什么 config 目录中的文件即使在明确提到要查看的位置后也没有被读取?
  2. 我在项目中有自己的依赖项,在其 jar 中打包了同名的属性文件。当 SpringBoot 在执行我的项目 jar 时尝试从 config 文件夹中读取文件时,这会产生任何问题吗?

更新

现在我只保留一个属性文件,假设 ABC.properties 在同一目录中的 jar 之外。我使用名称“ABC”而不是“应用程序”。我正在使用以下命令

java -Dserver.log.dir=/path/to/log/dir -jar myjar.jar --server.port=9090 --spring.config.name=ABC --prop1=val1

我已经覆盖了我的外部属性文件中的一个属性,但是在我运行应用程序时我没有看到被覆盖的值。我的新问题是

  1. 命令行有什么问题吗?

  2. 我在 xml bean 配置中有以下行

    。这是否会导致检测和使用外部属性出现任何问题?

  3. 如果上述情况属实,我必须删除该行 SpringBoot 将如何理解从何处导入属性值?

  4. (与问题没有直接关系)在给出命令行参数时我需要遵循一个顺序吗?

【问题讨论】:

  • 您是从/ 运行您的应用程序吗?如果不是,我认为您的位置 URL 可能是错误的。
  • 打错字了
  • 什么是错字?在您编辑后,这些 URL 对我来说仍然是错误的。当前的两个答案都解释了原因。
  • 错字是 spring.config.location 前面的一个“-”。我没有编辑 URL,因为这些是我在命令中使用的。

标签: java spring spring-boot


【解决方案1】:

Spring boot 已经明确指出如何编写这个外部配置。请参阅此处的文档参考:https://docs.spring.io/spring-boot/docs/2.5.2/reference/htmlsingle/#features.external-config.files

基本上,您需要像这样指定位置:

  1. --spring.config.location=classpath:/somefolder/somefile.properties
  2. --spring.config.location=file:./somefolder/somefile.properties

从您的命令行中,您似乎缺少一个破折号,并且还使用了错误的文件架构格式。

【讨论】:

  • 如果我不明确提及属性文件名称作为参数,那么即使它们在配置目录中也不会被拾取?
  • 没错,唯一默认的自动加载文件名是application-{profile}.properties或者application.properties(同.yaml)
  • 请检查上面的更新我在遵循我得到的建议后提供了更新。我的问题还没有解决?
【解决方案2】:

Q1:为什么配置目录中的文件即使在明确提到去哪里之后也没有被读取?

A1:如果你的 config 文件夹在你的 jar 文件旁边,你的命令应该是这样的

  • java -jar myjar.jar --spring.config.location=file:./config/PROP1.properties

同时,您还可以使用完整路径来定位您的配置文件。

Q2:如果我没有明确提及属性文件名称作为参数,那么即使它们在 config 目录中也不会被拾取

A2:不,见this doc,Spring Boot 会尝试从四个地方查找配置文件:

  • 当前目录的 /config 子目录。
  • 当前目录
  • 类路径 /config 包
  • 类路径根

如果spring.config.location 设置为not,则这些文件夹中名为application.properties 的文件将被视为有效配置文件。您可以通过设置属性spring.config.name来更改接受的文件名。

Q3关于配置文件优先级

A3 如前所述doc 中所述,如果相同名称的属性出现在不同的配置文件中,则列表中较高的位置会覆盖较低的项目。

另一个提示,最好删除 jar 文件中的配置文件,这样您就可以在一个地方(外部化配置文件夹)获得配置的完整视图;

【讨论】:

  • 非常感谢莱贝卡。您能否检查上面的更新,因为我在这方面遇到了另一个重要的障碍?
  • @PratyayMukherjee 你正在使用带有xml conf的spring boot。 location 属性似乎不正确,因为它既不以 file: 开头,也不以 classpath: 开头。尝试从 xml conf 中删除此行并再次测试。祝你好运。
猜你喜欢
  • 2016-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-05
  • 1970-01-01
  • 2016-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多