Spring Boot 2.0 使用 WAR 打包在 Tomcat 中外部化 属性 文件

Spring Boot 2.0 externalize property file in Tomcat using WAR packaging

我想创建一个 Spring 启动应用程序(打包为 WAR),它会根据部署环境自动覆盖一些配置文件。我还希望 属性 文件在 WAR 外部。我正在使用 OS Centos 和 Tomcat 作为网络服务器。

我正在尝试遵循 Vladimir Mitev 在以下问题 Similar question 中的回答。

为了实现这一点,我创建了这个 SPRING_CONFIG_ADDITIONAL_LOCATION 环境变量。然后在路径中我创建了一个 db.properties 文件,其中包含我想覆盖的 属性。

然后在 servlet 初始值设定项中我放置了这个配置:

public class ServletInitializer extends SpringBootServletInitializer {
  @Override
  protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    return application.sources(MyApplication.class).properties("spring.config.name: db");

  }
}

这是另一个需要的 class:

@SpringBootApplication
public class MyApplication{
    public static void main(String[] args) {
        System.setProperty("spring.config.name", "db");
        SpringApplication.run(MyApplication.class, args);
    }
}

但是 Spring 在初始化过程中引导没有找到 db.properties 文件。

official documentation 中,我似乎必须使用此 "spring.config.additional-location" 才能实现我的目标,但我不知道如何实现。

来不及在SpringBootServletInitializer中配置,必须在spring应用前设置属性运行

@SpringBootApplication
public class MyApplication {

    public static void main(String[] args) {
        System.setProperty("spring.config.name", "db");
        SpringApplication.run(MyApplication.class, args);
    }
}

你可以试试:

  1. 在 [tomcat-server-folder]/bin
  2. 中创建名为 "config" 的文件夹
  3. 在 config 文件夹中创建 db.properties 文件。 ([tomcat-服务器文件夹]/bin/config/db.properties)
  4. 只需在 Tomcat 的 bin 目录中创建文件 setenv.sh,内容为:

JAVA_OPTS="$JAVA_OPTS -Dspring.config.name=db"

或者您可以指定配置文件的位置:

JAVA_OPTS="$JAVA_OPTS -Dspring.config.location=/opt/app/default.properties,/opt/app/db.properties"