spring classpath在WEB-INF / classes下找不到配置文件

时间:2015-10-20 03:10:37

标签: spring spring-boot classpath

我正在使用Spring Boot并尝试让我的应用程序能够在运行时获取配置文件。这是我在spring文件中的内容

<context:property-placeholder location="classpath:config.properties" />

但是当我启动服务时出现了这个错误

Could not load properties; nested exception is java.io.FileNotFoundException: class path resource [config.properties] cannot be opened because it does not exist

我尝试将其更改为

<context:property-placeholder location="classpath*:config.properties" />

我收到了不同的错误

Could not resolve placeholder 'service.name' in string value "${service.name}"; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'service.name' in string value "${service.name}"

看起来它可以找到该文件但找不到该字符串(在config.properties中)

我把我的config.properties放在war-file文件

中的路径WEB-INF / classes /下
788 Mon Oct 19 09:54:28 PDT 2015 WEB-INF/classes/config.properties

任何人都知道出了什么问题?

提前致谢!

2 个答案:

答案 0 :(得分:0)

WEB-INF / classes是我希望在旧的WAR样式应用程序中找到类路径资源而不是Spring Boot应用程序的地方。您应该能够通过将config.properties放在src / main / resources中来修复您的问题,这是Maven或Gradle中的默认位置(这是非常流行的Spring Boot构建工具,我怀疑您正在使用其中一个或另一个)。

第二 - 我建议不要自己配置配置的位置,只需使用Spring引导默认位置src / main / resources / application.properties在此位置查找配置文件是一种约定,应该可以使用没有进一步的配置(除了删除当前的属性配置)。

请参阅23.3 http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

答案 1 :(得分:0)

默认情况下,SpringBoot会从类路径中查找application.properties,您的类路径中是否有application.properties?如果是,则在spring.config.location=classpath:/config.properties

中声明属性application.properties

如果您默认没有application.properties文件,请在启动服务器时通过命令行参数传递配置位置,如下所示。

$ java -jar myproject.jar --spring.config.location=classpath:/cofnig.properties

有关spring config的更多信息,请参阅SpringExternalizeConfig