2012-07-18 97 views
0

我在Tomcat7上部署Spring 3应用程序。我使用的OXM解组,所以我需要像这样创建的StreamSource:Spring + Tomcat:设置相关文件路径

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

我的dbSetupPath这样的设定值,它工作在单元测试

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

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

回答

0

所以我的解决办法是注入价值的org.springframework.core.io.Resource,而不是简单的字符串是这样的:

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

然后我访问底层文件并提供给编组:

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

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

你需要尝试

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

所以tomcat会检查DB-setup.xml文件在classpath

更多和适当的详情,请参阅

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

科:2.5 .3.1基于Java的bean元数据

+0

不幸的是,这并没有帮助我,我越来越:引起:java.io.FileNotFoundException:classpath:\ db-setup。xml(文件名,目录名称或卷标语法不正确) – Xorty 2012-07-18 12:29:20

+0

请参阅我上面给出的链接 – 2012-07-18 12:42:11

+0

您知道我可以将其属性或任何位置进行外部化,但最终必须使用String作为实际路径。这就是问题所在。 – Xorty 2012-07-18 12:44:05

0

将您的DB-的Setup.xml喜欢一样的画面

enter image description here

和改变这种

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

不幸的是,这并没有帮助我,我越来越:引起:java.io.FileNotFoundException:db-setup.xml(系统找不到指定的文件) – Xorty 2012-07-18 12:31:36

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

+0

我这样做,但没有变化:( – Xorty 2012-07-18 14:03:34