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

时间:2012-07-18 10:42:00

标签: java spring tomcat

我正在Tomcat7上部署Spring 3应用程序。我正在使用OXM unmarshaller所以我需要像这样创建StreamSource:

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

我为dbSetupPath设置了这样的值,它可用于单元测试

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

当我在Tomcat上部署时,我收到了FileNotFoundException。什么是正确的路径,以保持我的测试通过和Tomcat工作?我正在部署爆炸:战争atm。

4 个答案:

答案 0 :(得分:0)

在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元数据

答案 1 :(得分:0)

将db-setup.xml与图片

相同

enter image description here

并更改此

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

答案 2 :(得分:0)

我认为您可以指定路径:

$ {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应用程序根文件夹的实际路径。

这在我的情况下用于记录,这就是为什么我认为它也适用于你的情况。

Here is discussion about webAppRootKey

答案 3 :(得分:0)

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

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

然后我访问了底层文件并将其提供给marshaller:

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