使用 bootstrap.yml 覆盖命令行 Spring 属性

override command line Spring properties with bootstrap.yml

我有一个 tomcat 盒子,它已经设置了 spring 活动配置文件,作为每次通过 catalina 部署 spring 应用程序时的命令行参数。

我正在使用 spring 云配置服务器,因此在配置客户端中我在 bootstrap.yml 中指定了活动配置文件,但正如我之前提到的,它被 tomcat 命令行参数覆盖。

如何在 bootstrap 上下文加载时使用我的 boostrap.yml 覆盖通过 tomcat 传递的命令行参数,以便我可以从我的 [=24] 传递活动配置文件=] 到配置服务器。

Tomcat 设置环境命令(我无法更改,因为我没有访问权限)

JAVA_OPTS="$JAVA_OPTS -Djava.library.path=/path -Dspring.profiles.active=e2"

bootstrap.yml

spring:
  profiles:
    active: e2,cron
  cloud:
    config:
      uri: http://localhost:8888
  application:
    name: heartbeat_monitor. 

命令行参数 (-Dspring.profiles.active=e2) 将始终覆盖您的属性文件,无论您在 yaml 文件中指定了多少硬编码配置文件。我建议您添加额外的配置文件以在运行时以编程方式设置,并在 .yml 扩展名之前保留两个带有 -profilename 的 属性 文件。

这可以按如下方式完成:

ApplicationMain.java

public static void main(String[] args) {
    SpringApplication app = new SpringApplication(DemoApplication.class);
    app.setAdditionalProfiles("cron");
    app.run(args);
}

bootstrap-e2.yml

// Keep all the properties which is specific to e2 profile.

bootstrap-cron.yml

   // Keep all the properties which is specific to cron profile.

通过这种方式,您可以同时使用两个配置文件。但是,如果 属性 在两个 bootstrap 文件中都很常见,那么程序将从中选择 属性 bootstrap 文件的 profile 与运行时参数匹配:-Dspring.profiles.active