2012-07-18 138 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