由于文件路径中的附加斜杠,未找到 Spring 占位符 (.properties)

Posted

技术标签:

【中文标题】由于文件路径中的附加斜杠,未找到 Spring 占位符 (.properties)【英文标题】:Spring placeholder (.properties) not found because of an additional slash in the file path 【发布时间】:2018-07-15 15:58:13 【问题描述】:

我想将我的应用程序属性文件放在 Tomcat 的 conf 目录中,因此我写了

<context:property-placeholder location="$catalina.base/conf/app.properties"/>

我收到FileNotFoundException: Could not open ServletContext resource。 app.properties 文件在那里。问题是在 Spring 正在寻找文件的路径的开头有一个额外的斜线。好像是/D:/...../conf/app.properties

解决方案: 编写......location="文件:$catalin..... 工作。

【问题讨论】:

只做$classpath/app.properties,应该没问题:) 可以,但我不希望文件位于项目目录中。 你确定 Catalina base 是正确的属性吗? 你看过@PropertySource("file://your-file")??文档在这里docs.spring.io/spring-boot/docs/current/reference/html/… @IndraneelBende 你是什么意思? 【参考方案1】:

您需要指定为文件,因为您试图从外部文件中读取: <context:property-placeholder location="file:$catalina.base/conf/app.properties"/>

应该是这样的: How to read values from properties file?

【讨论】:

“需要确保 catalina.base 设置正确,以便上下文能够读取文件”是什么意思。我确信 cataline base 显示到正确的目录,因为异常堆栈跟踪中的路径看起来像 /D:/XX/MY_PROJ_NAME/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/conf/app.properties。当我从 Eclipse 的控制台复制此路径并删除第一个斜杠时,当我在 Windows 文件资源管理器中键入该文件时,该文件将在记事本中打开。当我将 file:// 添加到 /D:/XX/XX/tmp0/conf/app.properties 并尝试通过文件资源管理器访问它时,也会发生同样的情况。 “同样的情况”是指文件被记事本打开,而不是应用程序打开。 嗯...显然,第二个看起来是正确的!我也在做同样的事情,即读取占位符的属性并填充占位符!! @user435421 听起来很酷!!请您接受答案并点赞 如果您在答案中添加file: 可能是除file:// 之外的解决方案,那么我会这样做。对于可能会错过我在问题中更新的解决方案部分的读者...

以上是关于由于文件路径中的附加斜杠,未找到 Spring 占位符 (.properties)的主要内容,如果未能解决你的问题,请参考以下文章

由于 NDK 路径中的反斜杠,Qt Creator 无法构建 Android 库

绝对路径以及相对路径中的斜杠和反斜杠

\? 附加到文件路径时是啥意思

将应用程序上下文路径附加到 Spring Boot 应用程序中的超链接

如何对shell脚本中斜杠进行转义?

VB.Net 2010中 ./和../的含义