当前位置: 首页 > 知识库问答 >
问题:

如何在部署在Tomcat 8.5中的Spring boot中使用外部配置文件

淳于亦
2023-03-14
  • myapplication.properties(Spring的主配置文件)
  • log4j2.xml

两者都位于src/main/resources之下。

我的问题是如何配置Tomcat和Spring Boot,使我拥有一个包含这两个文件的目录/home/oliver/conf,以便覆盖在src/main/resources下定义的默认值(这些默认值位于爆炸战争中的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 {...}

当我启动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的类路径中?

共有1个答案

段干俊茂
2023-03-14

我从你的问题中所理解的是,你正试图做这样的事情。

-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
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服务器,一切工作在我的本地与本地数据库。现在,我必须将代码推广到数据库配置不同的更高环境。我读了很多关于配置文件的etc...,但是当它是一个外部tomcat并且不使用

  • 注意:它在src/main/resources/application.yml中工作

  • 我有一个应用程序,希望更改存储在application.yml文件中的数据源密码。YML文件中的密码存储如下: 我还尝试在JAR之外创建一个相同的(除了新密码)application.yml文件。那也不管用。 注意:由于http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-externa

  • 在springboot应用程序中,我有一个jar,然后是一个子目录config with application。属性,applicationContext。xml和log4j。。。属性文件。 我正在尝试外部化log4j配置。application.properties是这样外部化的。 但是,当springboot运行时,它使用jar文件中的log4j配置文件。通过使用-Dlog4j.debug选

  • 我有一个Spring-boot gradle应用程序,它没有任何web页面。这个应用程序有REST API,当我作为Spring boot应用程序运行时,它成功地被调用。 现在,在gradle的generation war之后,当我试图将它部署在apache-tomcat-8.0.35中时,它得到了部署,目录结构如下所示:- 但是现在我不能用tomcat端口8080访问我的REST api。我已经

  • 我正在开发一个运行在Tomcat上的Java/JavaScript webapp。 我们正在使用IDEA,我已经设法同时为客户端和服务器代码设置了调试,这很棒。在手动运行Tomcat时,我确实重新部署了javascript的设置,但是我发现在通过IDEA运行Tomcat时,这并不起作用,因为它正在我的用户文件夹中的某个地方设置东西。 我本来要设置一个部署配置去那个文件夹,但是我看不到里面的任何ja