2016-01-07 41 views
2

Spring版本4.2.2:什麼是在Java配置更換爲以下幾點:春@PropertySource,如何讀取一個文件不是在classpath中,不過在WEB-INF

<bean id="placeholderConfig" 
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location" value="/WEB-INF/conf/mars.properties" /> 
</bean> 

在一個我有以下的配置。文件:

@Configuration 
@EnableTransactionManagement 
@ComponentScan 
@PropertySource("file:WEB-INF/conf/mars.properties") 
public class JpaConfig { 

private static final String DB_DRIVER = "a"; 
private static final String DB_URL = "b";  
private static final String DB_USERNAME = "c"; 
private static final String DB_PASSWORD = "d"; 
private static final String DB_PLATFORM = "e"; 

@Resource 
private Environment env; 

@Bean(destroyMethod="close") 
public DataSource dataSource() { 
org.apache.tomcat.jdbc.pool.DataSource ds = new org.apache.tomcat.jdbc.pool.DataSource(); 
PoolProperties p = new PoolProperties(); 

p.setUrl(env.getProperty(DB_URL)); 
p.setDriverClassName(env.getProperty(DB_DRIVER)); 
p.setUsername(env.getProperty(DB_USERNAME)); 
p.setPassword(env.getProperty(DB_PASSWORD)); 
.... 
} 

這將導致以下運行時錯誤:

Caused by: java.io.FileNotFoundException: \WEB-INF\conf\mars.properties (The system cannot find the path specified) 
at java.io.FileInputStream.open0(Native Method) 
at java.io.FileInputStream.open(FileInputStream.java:195) 

我嘗試了以下的變化,但無濟於事:

@PropertySource("file://WEB-INF/conf/mars.properties") 

這是一個XML配置基於應用我」 m轉換爲Java Config。

回答

3

所有你需要的是

@PropertySource("/WEB-INF/conf/mars.properties") 

Spring將使用DefaultResourceLoader#getResource(String)。對於從/開始的路徑,此代理人代表getResourceByPath,由AbstractRefreshableWebApplicationContext(處理@ConfigurationAnnotationConfigWebApplicationContext的超類)重寫。

然後,這將創建一個ServletContextResource,它可以成功地找到相對於servlet上下文的資源。

+0

它應該與春季3.2一起工作嗎? 對我來說,它始終告訴「在啓動時無法打開類路徑資源[WEB-INF/properties/config.properties],因爲它不存在」。 (注意:在錯誤消息中刪除了前導斜槓) – baraber

+0

@baraber通常,WEB-INF不會添加到類路徑中。將您的屬性文件移動到類路徑上的某些內容或將WEB-INF添加到類路徑中。 –

相關問題