在Spring Boot中在war文件之外加载属性文件

时间:2018-09-06 21:06:09

标签: java spring-boot

我需要从Spring Boot War外部加载application.properties文件,该文件将部署在tomcat中。

我尝试了各种解决方案,缺少某些东西

  1. 尝试在Windows中按如下所示设置环境变量

    名称:SPRING_CONFIG_NAME 值:D:/test/application.properties

我尝试了多个值来实现上述值,例如前缀file:///和仅file:作为perfix。没有任何作用

  1. 尝试具有上下文参数的是tomcat,如以下SO答案中所述 https://stackoverflow.com/a/44697239/2751962

  2. 试图在扩展SpringBootServletIntializer的主文件中像这样加载

    受保护的SpringApplicationBuilder configure(SpringApplicationBuilder应用程序){                 返回application.sources(Application.class)                       .properties(getProperties());             }

     public static void main(String[] args) throws Exception {
                    SpringApplication.run(Application.class, args);
    
                     SpringApplicationBuilder springApplicationBuilder = (SpringApplicationBuilder) (new SpringApplicationBuilder(Application.class))
                     .sources(Application.class)
                     .properties(getProperties())
                     .run(args);
    
    
                }
    
                static Properties getProperties() {
                    Properties props = new Properties();
                    props.put("spring.config.location", "file:///D:/test/application.properties​");
                    return props;
                }
    

我不确定我错过了什么,请帮忙。

2 个答案:

答案 0 :(得分:2)

Spring Boot中的外部配置

使用Spring Boot时,有记录的命名约定和目录结构。 Spring Boot应用程序从优先列表中搜索要加载的属性,因此有一些建议供您考虑:

  1. 使用命令行标志spring.config.location定向到特定的文件或目录,以从中加载属性源。您可以使用它来指定要搜索的目录或要加载的单个文件。但是,如果要使用基于配置文件的属性,请谨慎加载单个文件。 (在命令中添加如下标记:java -jar MyJar.jar --spring.config.location=D:\test\
  2. 默认情况下,Spring Boot将查找WAR所在的./config/目录和WAR本身的目录,因此您可以将“ application.properties”放在任一位置,并将其加载。

Pivotal为Spring Boot提供了非常出色的参考。第24节比我在帖子中更广泛地介绍了属性。

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html(*链接到最新版本的参考)

注意:我不是Windows用户,因此请小心粘贴在上面的文件路径中。编辑我。


将配置扩展到可部署的程序包

通常,Spring Boot将程序包打包到可执行的WAR或JAR中,该文件具有用于运行时的嵌入式Servlet容器引擎。但是,在您的情况下,您将打包常规WAR并将其部署到Tomcat的外部实例,因此必须使用JAVA_OPTS变量通过Tomcat传播配置参数。

对于Apache Tomcat,约定是将属性放在${catalina_base}/conf中,其中catalina.base指向Tomcat实例的位置。我按照以下步骤创建了一个工作演示:

  • 首先,请按照参考资料的88.1节设置基本的WAR应用
  • mvn package
  • 将application.properties放置在Tomcat的conf目录中
  • set JAVA_OPTS=-Dspring.config.location=${catalina.base}/conf/
  • "%CATALINA_HOME%"\bin\startup
  • 部署

这不是最干净的部署管道,但是如果您必须使用外部Tomcat实例,那么它将起作用。但是,在同一个Tomcat实例上运行带有单独属性文件的多个应用程序会使事情复杂化。在这种情况下,使用Spring Framework(而非Boot)将更易于配置。

答案 1 :(得分:1)

您可以尝试通过XML和/或Java配置以及@PropertySource设置属性。

@Configuration
@PropertySource("classpath:foo.properties")
public class PropertiesWithJavaConfig {
    //...
}

源:-https://www.baeldung.com/properties-with-spring