Java 弹簧&x2B;Tomcat:设置相对文件路径
我正在Tomcat7上部署Spring3应用程序。我正在使用OXM解组器,因此我需要创建如下StreamSource:Java 弹簧&x2B;Tomcat:设置相对文件路径,java,spring,tomcat,Java,Spring,Tomcat,我正在Tomcat7上部署Spring3应用程序。我正在使用OXM解组器,因此我需要创建如下StreamSource: unmarshaller.unmarshal(new StreamSource(new FileInputStream(dbSetupPath))) @Value("classpath:/db/db-setup.xml") Resource dbConfig; 我这样设置dbSetupPath的值,它在单元测试中工作: @Value("src/main/resources/
unmarshaller.unmarshal(new StreamSource(new FileInputStream(dbSetupPath)))
@Value("classpath:/db/db-setup.xml")
Resource dbConfig;
我这样设置dbSetupPath的值,它在单元测试中工作:
@Value("src/main/resources/db-setup.xml")
String dbSetupPath;
但当我在Tomcat上部署时,我得到的是FileNotFoundException。什么是保持我的测试通过和Tomcat工作的正确路径?我正在部署exploded:waratm。当您在tomcat上部署时,所有资源文件夹文件都会放入WEB-INF/classes文件夹中的.war文件中 你需要试一试
@Value("classpath:/db-setup.xml")
因此tomcat将检查类路径中的db-setup.xml
有关更多和适当的详细信息,请参阅
部分: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>
WebApprotKey
韦帕洛特
Spring将自动将web应用程序根文件夹的实际路径注入此参数
这在我的日志记录案例中是有效的,这就是为什么我认为它在您的案例中也是有效的
所以我的解决方案是将值注入org.springframework.core.io.Resource,而不是像这样的普通字符串:
unmarshaller.unmarshal(new StreamSource(new FileInputStream(dbSetupPath)))
@Value("classpath:/db/db-setup.xml")
Resource dbConfig;
然后我访问了底层文件并将其提供给封送员:
unmarshaller.unmarshal(new StreamSource(dbConfig.getFile());
不幸的是,这对我没有帮助,我得到了:起因:java.io.FileNotFoundException:classpath:\db-setup.xml(文件名、目录名或卷标语法不正确)你知道我可以外部化它的属性或任何地方,但最终我必须使用字符串作为真正的路径。这就是问题所在。不幸的是,这对我没有帮助,我得到了:原因:java.io.FileNotFoundException:db-setup.xml(系统找不到指定的文件)