将 spring.config.location 设置为相对路径

bod*_*iec 3 java spring spring-boot

可以使用相对路径spring.config.location吗?

我在 IntelliJ 中有以下结构

|-dev.yml
|-src
  |-main
  |-java
    |-com.foo
      |-MySpringApp.java
Run Code Online (Sandbox Code Playgroud)

并运行它

--spring.config.location=dev.yml
Run Code Online (Sandbox Code Playgroud)

这不起作用

唯一有效的是设置完整路径

--spring.config.location=/user/.../myApp/dev.yml
Run Code Online (Sandbox Code Playgroud)

Ada*_*dam 7

奇怪的是从来没有人回答过这个问题。

我只是通过反复试验自己解决了这个问题。

相对路径总是有效的,因为无论何时何地,Java 都会从某个目录运行。只是发现它是什么的一个案例。

在我使用 Win10、Java 1.8、IntelliJ 2018 和 Spring Boot 2.0.2 的情况下,将我的应用程序作为 IntelliJ 中的 Spring Boot 应用程序运行,我的相对路径是相对于项目根目录的。

所以对你来说,我假设它以相同的方式开始,使用项目根。由于这是您的属性所在的位置,因此您需要.,然后由于它是一个目录,您需要在末尾附加一个斜杠:

--spring.config.location=./
Run Code Online (Sandbox Code Playgroud)

  • `file://` 只能处理绝对路径,我不得不使用类路径。例如 `classpath:./application.yaml` 才能正常工作。如果没有类路径前缀,上面的方法就不起作用。对于 docker compose,这有效:`SPRING_CONFIG_LOCATION: 'classpath:./application.yaml'` (2认同)