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

Posted

技术标签:

【中文标题】一个 tomcat 实例中的多个 Web 应用程序从另一个应用程序的属性文件开始【英文标题】:Multiple web applications in one tomcat instance start with a properties file from another applications 【发布时间】:2020-09-04 00:56:02 【问题描述】:

我们在一台服务器上的一个 tomcat 实例中有多个 Web 应用程序,它们都在内部运行一个 spring-boot 应用程序。

每当我们启动 tomcat 并启动所有 spring-boot 应用程序时,我们大多会看到每个应用程序可能使用来自另一个应用程序的属性文件/设置。

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

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

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

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

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

【问题讨论】:

【参考方案1】:

我们发现了导致此行为的 2 个可能原因:

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

【讨论】:

以上是关于一个 tomcat 实例中的多个 Web 应用程序从另一个应用程序的属性文件开始的主要内容,如果未能解决你的问题,请参考以下文章

tomcat单实例多应用多实例多应用部署

tomcat配置管理:基于多实例的tomcat配置管理

Tomcat

多实例tomcat

tomcat笔记

tomcat笔记