一个 tomcat 实例中的多个 Web 应用程序从另一个应用程序的属性文件开始

Multiple web applications in one tomcat instance start with a properties file from another applications

我们在 1 台服务器上的一个 tomcat 实例中有多个 Web 应用程序,所有 运行 一个 spring-boot 应用程序在里面。

每当我们启动 tomcat 并开始启动所有 spring-boot 应用程序时,我们通常会看到每个应用程序都可能使用另一个应用程序的 属性 files/settings .

特别发生的是,我们看到它有时会使用来自正在使用的其他应用程序的数据库信息,从而导致数据库包含来自其他应用程序的表。这很可怕,因为我们可能会开始数据库迁移或其他事情。

我们还看到日志写入了错误的项目日志文件。

我们使用 application.properties 定义这些设置(有时 application-test.propertiesapplication-secret.properties):

spring.datasource.username
spring.datasource.password
logging.file.name

有人知道为什么会这样吗?

我们发现此行为有 2 个可能的原因:

  1. 如果 Tomcat 在存在应用程序 属性 文件的目录中启动,或者应用程序 属性 文件位于 /config 子目录中,例如 WEB-INF/classes 目录,这些应用程序 属性 文件被部署在 tomcat 实例中的每个 Spring 启动应用程序使用。要解决此问题,请确保 Tomcat 启动脚本将工作目录更改为不包含应用程序 属性 文件的目录。
  2. 如果 server.xml 中 Tomcat Engine element 的 'startStopThreads' 属性设置为大于 1 的值,Spring 引导应用程序似乎偶尔随机使用应用程序 [= Tomcat 实例中部署的其他 Spring 引导应用程序的 30=] 个文件。当 'startStopThreads' 设置为 1 时,我们看不到此行为。