[英]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應用程序根文件夾的實際路徑。
對於我來說,這對於日志記錄是有效的,這就是為什么我認為它也適用於您的情況。
所以我的解決方案是將值注入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.