0

我在 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 正常工作的正确路径?我正在部署exploded:war atm。

4

4 回答 4

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

于 2012-07-18T10:47:22.300 回答
0

将您的 db-setup.xml 与图片相同

在此处输入图像描述

并改变这个

@Value("db-setup.xml")
String dbSetupPath;
于 2012-07-18T11:00:22.193 回答
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 应用根文件夹的实际路径。

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

这是关于 webAppRootKey 的讨论

于 2012-07-18T13:09:32.147 回答
0

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

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

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

unmarshaller.unmarshal(new StreamSource(dbConfig.getFile());
于 2012-07-26T10:05:25.073 回答