我需要从Spring Boot War外部加载application.properties文件,该文件将部署在tomcat中。
我尝试了各种解决方案,缺少某些东西
尝试在Windows中按如下所示设置环境变量
名称:SPRING_CONFIG_NAME 值:D:/test/application.properties
我尝试了多个值来实现上述值,例如前缀file:///和仅file:作为perfix。没有任何作用
尝试具有上下文参数的是tomcat,如以下SO答案中所述 https://stackoverflow.com/a/44697239/2751962
试图在扩展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;
}
我不确定我错过了什么,请帮忙。
答案 0 :(得分:2)
Spring Boot中的外部配置
使用Spring Boot时,有记录的命名约定和目录结构。 Spring Boot应用程序从优先列表中搜索要加载的属性,因此有一些建议供您考虑:
spring.config.location
定向到特定的文件或目录,以从中加载属性源。您可以使用它来指定要搜索的目录或要加载的单个文件。但是,如果要使用基于配置文件的属性,请谨慎加载单个文件。 (在命令中添加如下标记:java -jar MyJar.jar --spring.config.location=D:\test\
)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实例的位置。我按照以下步骤创建了一个工作演示:
mvn package
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 {
//...
}