繁体   English   中英

Spring + Tomcat:设置相对文件路径

[英]Spring + Tomcat: Setup relative file path

我正在Tomcat7上部署Spring 3应用程序。 我正在使用OXM解组器,因此我需要像这样创建StreamSource:

unmarshaller.unmarshal(new StreamSource(new FileInputStream(dbSetupPath)))

我像这样设置dbSetupPath的值,它可以在单元测试中使用

@Value("src/main/resources/db-setup.xml")
String dbSetupPath;

但是,当我在Tomcat上部署时,出现FileNotFoundException。 什么是使我的测试通过和Tomcat正常运行的正确路径? 我正在部署exploded:war atm。

在tomcat上部署时,所有资源文件夹文件都将进入WEB-INF / classes文件夹中的.war文件。

你需要尝试

@Value("classpath:/db-setup.xml")

因此,tomcat将在类路径中检查db-setup.xml。

有关更多和适当的详细信息,请参阅

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/new-in-3.html

2.5.3.1节: 基于Java的Bean元数据

放置db-setup.xml就像图片一样

在此处输入图片说明

并改变这个

@Value("db-setup.xml")
String dbSetupPath;

我认为您可以指定这样的路径:

$ {webAppRoot} WEB-INF / db-setup.xml

并将db-setup.xml放入WEB-INF文件夹(或创建一些子文件夹)。

同样,为了正确使用此方法,您需要在web.xml中指定以下参数:

<context-param>
    <param-name>webAppRootKey</param-name>
    <param-value>webAppRoot</param-value>
</context-param>

Spring会自动将此参数注入到Web应用程序根文件夹的实际路径。

对于我来说,这对于日志记录是有效的,这就是为什么我认为它也适用于您的情况。

这是关于webAppRootKey的讨论

所以我的解决方案是将值注入org.springframework.core.io.Resource而不是像这样的普通String:

@Value("classpath:/db/db-setup.xml")
Resource dbConfig;

然后,我访问了基础文件并将其提供给编组器:

unmarshaller.unmarshal(new StreamSource(dbConfig.getFile());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM