【问题标题】:How to override properties from application.yml when using external tomcat?使用外部tomcat时如何覆盖application.yml的属性?
【发布时间】:2022-01-15 02:24:27
【问题描述】:

我将我的应用程序作为 WAR 文件部署在外部 tomcat 中,因为有多个应用程序在同一个 tomcat 上运行。

resources 目录内的application.yml 中,我有(以及其他属性):

logging:
   file: MY_APP.log

我想在应用程序运行到外部 tomcat 时覆盖这个值。我将 application-myapp.yml 创建到 CATALINA_BASE/conf/application-myapp.yml 中,内容如下:

logging:
   file: ${catalina.base}/logs/MY_APP.log

在我的主要课程中:

@SpringBootApplication
@PropertySource({"classpath:application.yml", "file:${catalina.base}/conf/application-myapp.yml"})
public class MyApp extends SpringBootServletInitializer{

}

但该值没有被覆盖,并且 MY_APP.log 是在我执行 startup.bat 的 /bin 目录中创建的,这意味着 conf/application-myapp.yml 不会覆盖 logging.file 属性。

请注意,我需要它用于其他一些属性。像 JDBC url 等,logging.file 只是一个例子!

我想要的是在 tomcat/conf 目录中有一个永久的application-myapp.yml,其中一些属性配置为在生产中工作。这些值将覆盖来自resources/application.yml 的那些(两个配置文件中都存在属性)。

我尝试了很多东西。我也尝试拥有.properties 文件,但没有运气。我还尝试了以下方法:

@PropertySources(
   @PropertySource("classpath:application.yml"),
   @PropertySource(value = "file:${catalina.base}/conf/application-myapp.yml", ignoreResourceNotFound = true)
)

但仍然......没有运气。我还在@PropertySource 注释中尝试了不同的顺序。

如何在Spring Boot 1.5.8.RELEASE 版本中实现这一点?

例如,如果我有:

resources/application.yml:

property1: value1
property2: value2
property3: value3

CATALINA_BASE/conf/application-myapp.yml:

property2: value4

应用程序将启动:

property1: value1
property2: value4 #<-- here, overriden by application-myapp.yml
property3: value3

【问题讨论】:

  • 尝试颠倒@PropertySource中的参数顺序
  • @PiotrP.Karwasz 我已经尝试过了。再次,没有运气。

标签: java spring spring-boot tomcat


【解决方案1】:

要使用外部配置,请尝试设置 SPRING_CONFIG_LOCATION 环境变量,如下所示:

export SPRING_CONFIG_LOCATION=${catalina.base}/conf/application-myapp.yml

【讨论】:

    猜你喜欢
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 2018-03-12
    • 1970-01-01
    • 2014-01-27
    • 2021-05-28
    • 2018-10-03
    相关资源
    最近更新 更多