簡體   English   中英

Spring + Tomcat:設置相對文件路徑

[英]Spring + Tomcat: Setup relative file path

我正在Tomcat7上部署Spring 3應用程序。 我正在使用OXM解組器,因此我需要像這樣創建StreamSource:

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

我像這樣設置dbSetupPath的值,它可以在單元測試中使用

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

但是,當我在Tomcat上部署時,出現FileNotFoundException。 什么是使我的測試通過和Tomcat正常運行的正確路徑? 我正在部署exploded:war atm。

在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元數據

放置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>

Spring會自動將此參數注入到Web應用程序根文件夾的實際路徑。

對於我來說,這對於日志記錄是有效的,這就是為什么我認為它也適用於您的情況。

這是關於webAppRootKey的討論

所以我的解決方案是將值注入org.springframework.core.io.Resource而不是像這樣的普通String:

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

然后,我訪問了基礎文件並將其提供給編組器:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM