Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 弹簧&x2B;Tomcat:设置相对文件路径_Java_Spring_Tomcat - Fatal编程技术网

Java 弹簧&x2B;Tomcat:设置相对文件路径

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/

我正在Tomcat7上部署Spring3应用程序。我正在使用OXM解组器,因此我需要创建如下StreamSource:

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(系统找不到指定的文件)