繁体   English   中英

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

[英]override command line Spring properties with bootstrap.yml

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

我正在使用 spring 云配置服务器,因此在配置客户端中,我在 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. 

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

这可以按如下方式完成:

主应用程序

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.

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM