Java 在spring引导中加载war文件之外的属性文件
我需要从spring boot war外部加载application.properties文件,该文件将在tomcat中部署 我尝试了各种解决方案,但遗漏了一些东西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
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\
)将配置扩展到可部署软件包 通常情况下,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\
)将配置扩展到可部署软件包 通常情况下,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 {
//...
}