【发布时间】: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