我的 Spring Boot 应用程序 (2.1.1.RELEASE) 作为 WAR 部署在 Debian 9 系统下的 Tomcat 8.5 服务器中。除其他外,它使用以下文件来配置应用程序:
- myApplication.properties(Spring的主配置文件)
- log4j2.xml
两者都在src/main/resources
.
我的问题是如何配置 Tomcat 和 Spring Boot 以允许我拥有一个目录/home/oliver/conf
其中包含这两个文件,以便覆盖下定义的默认值src/main/resources
(然后在WEB-INF/classes
在爆发的战争中)。
以下是我已采取的步骤。
首先,作为我正在处理的项目的要求,我通过编辑更改了默认的 Tomcat 基目录以指向另一个位置/etc/init.d/tomcat8
:
CATALINA_HOME=/usr/share/tomcat8
CATALINA_BASE=/home/oliver
My /home/oliver/conf
包含 Tomcat 和 Spring 配置的文件夹如下所示:
- Catalina/
- context.xml
- web.xml
- server.xml
- ...
- myApplication.properties
- log4j2.xml
- otherAppConfFile.properties
- ...
因为Spring寻找application.properties
默认情况下,我正在使用@PropertySource注释指定另一个文件:
@SpringBootApplication
@PropertySource({classpath: myApplication.properties})
public class MyApp extends SpringBootServletInitializer {...}
我尝试添加-Dspring.config.location=file:/home/oliver/conf/myApplication.properties
to JAVA_OPTS定义于/etc/default/tomcat8
,并且它可以工作(正确覆盖嵌入文件),但是例如如果我尝试添加file:/etc/oliver/conf/log4j2.xml
改成前面的JVM参数,就不起作用了。
我读了一些有关 Spring“环境配置文件”的内容,但如果可能的话不想使用它们。
当我启动 Tomcat 并发出ps aux | grep tomcat
命令,我看到所有 JAVA_OPTS 参数都按预期定义,而且我还看到以下内容:
-classpath :/home/oliver/conf:/usr/share/tomcat8/bin/.... -Dcatalina.base=/home/oliver -Dcatalina.home=/usr/share/tomcat8
我对 Tomcat 的类路径和 Spring 的类路径的关联方式以及我应该如何解决这个问题有点困惑。
如果我在启动时看到的类路径包括/home/oliver/conf
目录中,为什么里面的文件不覆盖嵌入的属性文件(myApplication.properties、log4j2.xml ...)?是否可以看到该文件夹并将其添加到 Spring 的类路径中?
EDIT :
附带说明一下,下面可能有各种文件/home/oliver/conf
需要考虑到这一点,例如log4j2.xml + myApplication.properties + 密钥库.jks所以我不确定我可以信赖-Dspring.config.location
and -Dlogging.config
完全。