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

Spring boot 一个tomcat实例中的多个web应用程序从另一个应用程序的属性文件开始,spring-boot,tomcat,tomcat8,Spring Boot,Tomcat,Tomcat8,我们在一台服务器上的一个tomcat实例中有多个web应用程序,所有这些应用程序都在其中运行spring引导应用程序 每当我们启动tomcat并启动所有spring启动应用程序时,我们通常会看到每个应用程序都可能使用另一个应用程序的属性文件/设置 特别发生的是,我们看到它有时会使用其他正在使用的应用程序的数据库信息,从而生成一个包含其他应用程序的表的数据库。这很可怕,因为我们可能会开始数据库迁移之类的事情 我们还看到日志被写入了错误的项目日志文件 我们使用应用程序.properties之类的(或

我们在一台服务器上的一个tomcat实例中有多个web应用程序,所有这些应用程序都在其中运行spring引导应用程序

每当我们启动tomcat并启动所有spring启动应用程序时,我们通常会看到每个应用程序都可能使用另一个应用程序的属性文件/设置

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

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

我们使用
应用程序.properties
之类的(或有时
应用程序测试.properties
应用程序secret.properties
)来定义这些设置:


有人知道为什么会发生这种情况吗?

我们找到了导致这种行为的两个可能原因:

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