0

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

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

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

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

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

引导程序.yml

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

1 回答 1

1

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

这可以按如下方式完成:

应用程序主程序.java

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

引导-e2.yml

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

引导-cron.yml

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

这样,您可以保持两个配置文件都在使用中。但是,如果一个属性在两个引导文件中都是通用的,那么程序将从该引导文件中选择profile与运行时参数匹配的属性:-Dspring.profiles.active

于 2020-11-03T18:57:30.173 回答