Java 在spring引导中加载war文件之外的属性文件

Java 在spring引导中加载war文件之外的属性文件,java,spring-boot,Java,Spring Boot,我需要从spring boot war外部加载application.properties文件,该文件将在tomcat中部署 我尝试了各种解决方案,但遗漏了一些东西 已尝试在windows中设置环境变量,如下所示 名称:SPRING\u配置\u名称 值:D:/test/application.properties 我尝试了上述值的多个值,如前缀中的file:///和perfix中的唯一file:。没有任何效果 尝试使用上下文参数是tomcat,如下所述,所以请回答 尝试在扩展SpringBoo

我需要从spring boot war外部加载application.properties文件,该文件将在tomcat中部署

我尝试了各种解决方案,但遗漏了一些东西

  • 已尝试在windows中设置环境变量,如下所示

    名称:SPRING\u配置\u名称 值:D:/test/application.properties

  • 我尝试了上述值的多个值,如前缀中的file:///和perfix中的唯一file:。没有任何效果

  • 尝试使用上下文参数是tomcat,如下所述,所以请回答

  • 尝试在扩展SpringBootServletitializer的主文件中这样加载

    受保护的SpringApplicationBuilder配置(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;
                }
    

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

    Spring Boot中的外部配置

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

  • 使用命令行标志
    spring.config.location
    以加载属性源的特定文件或目录为目标。您可以使用此选项指定要搜索的目录或要加载的单个文件。但是,如果要使用基于配置文件的属性,请小心加载单个文件。(在命令中添加如下标志:
    java-jar MyJar.jar--spring.config.location=D:\test\
  • 默认情况下,SpringBoot将查找WAR所在的./config/目录和WAR本身的目录,因此您可以将“application.properties”放在任意位置,然后将加载它
  • Pivotal为Spring Boot提供了非常好的参考。第24节涵盖的内容比我在文章中所能描述的更广泛

    (*链接到最新版本的参考)

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


    将配置扩展到可部署软件包

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

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

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

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

    Spring引导中的外部配置

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

  • 使用命令行标志
    spring.config.location
    以加载属性源的特定文件或目录为目标。您可以使用此选项指定要搜索的目录或要加载的单个文件。但是,如果要使用基于配置文件的属性,请小心加载单个文件。(在命令中添加如下标志:
    java-jar MyJar.jar--spring.config.location=D:\test\
  • 默认情况下,SpringBoot将查找WAR所在的./config/目录和WAR本身的目录,因此您可以将“application.properties”放在任意位置,然后将加载它
  • Pivotal为Spring Boot提供了非常好的参考。第24节涵盖的内容比我在文章中所能描述的更广泛

    (*链接到最新版本的参考)

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


    将配置扩展到可部署软件包

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

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

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

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

    您可以尝试通过XML和/或Java confi设置属性
    @Configuration
    @PropertySource("classpath:foo.properties")
    public class PropertiesWithJavaConfig {
        //...
    }