【问题标题】:Spring Boot 2.0 externalize property file in Tomcat using WAR packagingSpring Boot 2.0 使用 WAR 打包将 Tomcat 中的属性文件外部化
【发布时间】:2019-09-08 12:43:18
【问题描述】:

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

我正在尝试关注 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");

  }
}

这是另一个需要的类:

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

但是Spring Boot在初始化过程中找不到db.properties文件。

在official documentation 似乎我必须使用这个“spring.config.additional-location”才能实现我的目标,但我不知道如何。

【问题讨论】:

    标签: java spring-boot tomcat configuration war


    【解决方案1】:

    你可以试试:

    1. 在 [tomcat-server-folder]/bin 中创建名为“config”的文件夹
    2. 在 config 文件夹中创建 db.properties 文件。 ([tomcat-server-folder]/bin/config/db.properties)
    3. 只需在 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"

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 对不起,我忘了在问题中发布那部分,但我有。而且还是不行。 Mu 怀疑这个环境变量 SPRING_CONFIG_ADDITIONAL_LOCATION。我想 spring 不会寻找这个变量。
      • 请粘贴您如何设置 SPRING_CONFIG_ADDITIONAL_LOCATION 的值
      • 在这个文件 tomcat/bin/setenv.sh 我有这个简单的行:export SPRING_CONFIG_ADDITIONAL_LOCATION=/usr/local/tomcat/conf/
      • setenv.sh 文件中存在空格问题,变量不起作用。感谢您的帮助!
      猜你喜欢
      • 2019-05-15
      • 1970-01-01
      • 2017-11-24
      • 2015-06-26
      • 2018-02-21
      • 1970-01-01
      • 2015-09-03
      • 2018-05-18
      • 2020-07-30
      相关资源
      最近更新 更多