我的Spring Boot应用程序(2.1.1.RELEASE)作为WAR部署在Debian 9系统下的Tomcat 8.5服务器中。除其他外,它使用以下文件来配置应用程序:
两者都在src/main/resources
下。
我的问题是有关如何配置Tomcat和Spring Boot的方式,该方式允许我拥有包含两个文件的目录/home/oliver/conf
,以便覆盖src/main/resources
下定义的默认值(然后放在爆炸的WAR中的WEB-INF/classes
中)。
下面是我采取的步骤。
首先,作为我正在从事的项目的要求,我通过编辑/etc/init.d/tomcat8
将默认的Tomcat基本目录更改为指向另一个位置:
CATALINA_HOME=/usr/share/tomcat8
CATALINA_BASE=/home/oliver
我的/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
添加到/etc/default/tomcat8
中定义的 JAVA_OPTS 中,并且可以正常工作(正确覆盖嵌入式文件),但是例如,如果我尝试添加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的classpath中?
编辑:
请注意,/home/oliver/conf
下可能需要考虑各种文件,例如 log4j2.xml + myApplication.properties < / strong> + keystore.jks ,所以我不确定我是否可以完全依靠-Dspring.config.location
和-Dlogging.config
。
答案 0 :(得分:1)
我从您的问题中了解到,您正在尝试执行类似的操作。
-Dspring.config.location=file:/etc/oliver/conf/log4j2.xml
我认为属性spring.config.location是提供用于配置的属性文件的位置,而不是log4j2.xml。 您可以通过设置logging.config的值来设置myApplication.properties中日志文件的位置,例如
logging.config=file:/etc/oliver/conf/log4j2.xml
否则,您可以尝试
-Dlogging.config=file:/etc/oliver/conf/log4j2.xml
更新
这就是我在生产系统中所做的。创建文件setenv.sh并输入以下命令。
export JAVA_OPTS="$JAVA_OPTS -Djavax.net.ssl.trustStore=/path/to/keystore/keystore.jks -Djavax.net.ssl.trustStorePassword=changeit -Dspring.profiles.active=qa -Dspring.config.location=/path/to/config/ -Dfws_log=/path/to/logfile/location -Xms512m -Xmx1024m -Dsecret.key=somesecretkey"
您可以在此文件中添加任意数量的键值映射,并且所有这些键值映射将在您的tomcat启动时加载。