【问题标题】:Spring boot starts even if start with nonexistent profile即使从不存在的配置文件开始,Spring Boot 也会启动
【发布时间】:2019-04-18 11:56:05
【问题描述】:

我有 spring boot 应用程序 - server.jar 具有下一个结构:

-resources
 -application.yaml

构建后,我创建了一个名为 source 的文件夹。并将我的罐子放到这个文件夹中。另外,我创建了 start .bat 文件

-source
 -server.jar
 -start.bat

在start.but我接下来写的文件中:

java -Dspring.profiles.active="foofoofoo" -jar server.jar
pause

当我运行start.bat 时,我的服务器以日志开头:

The following profiles are active: foofoofoo

并使用来自application.yaml 的属性。我没有名为foofoofoo 的个人资料,也没有apllication-foofoofoo.yaml。为什么?为什么spring写它加载foofoofoo配置文件,加载application.yaml并工作?

它一定会崩溃,因为我使用不存在的配置文件启动应用程序!

相反,我看到一个正在运行的应用程序具有另一个属性!我该如何处理?

【问题讨论】:

  • 您的 application.yml 是否具有 application-your-profile.yml 的所有属性?
  • @htshame 我没有application-your-profile.yml 。我的罐子里只有application.yml
  • 配置文件特定的属性文件是可选的。所以没有它不会导致应用程序崩溃。该配置文件可用于更多的事情,然后加载属性文件。因此,没有“丢失”文件不会导致应用程序崩溃,因为它只是可选的。
  • @M. Deinum 那么我该如何管理个人资料。我有一个包含 3 个配置文件的应用程序 - dev,test,prod。我有 4 个 yaml 文件 - application.yaml、application-dev.yaml、application-test.yaml 和 application-prod.yaml。我将基本配置存储在 application.yaml 中,并在其他 yaml 文件中覆盖它。当我在测试环境中启动应用程序时,我传递参数 - -Dspring.profiles.active=test。但如果 application-test.yaml 不存在 - 应用程序以 application.yaml 开头。不好
  • 如果应用程序没有特定配置,我想阻止它运行

标签: spring-boot yaml spring-profiles


【解决方案1】:

当您启动应用程序时,resources 目录中的application.yml 文件将被包含无论如何。

如果您在resources 目录中也有application-yourProfileName.yml 并添加

--spring.profile.active=yourProfileName参数,

然后两个属性文件都被包含在内,并且注意在这种情况下application-yourProfileName.yml会覆盖application.yml中的相同属性。

【讨论】:

    【解决方案2】:

    配置文件的使用方式不仅限于应用程序的属性。没有application-your-profile.{properties, yml} 也没关系。加载配置文件并不意味着加载属性文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-25
      • 2017-08-09
      • 1970-01-01
      • 2016-10-15
      • 1970-01-01
      • 2019-01-06
      相关资源
      最近更新 更多