在 Spring ApplicationContext 中设置 PropertyPlaceholderConfigurer 相对于 applicationContext.xml 的位置
Posted
技术标签:
【中文标题】在 Spring ApplicationContext 中设置 PropertyPlaceholderConfigurer 相对于 applicationContext.xml 的位置【英文标题】:set location of PropertyPlaceholderConfigurer in Spring ApplicationContext relative to applicationContext.xml 【发布时间】:2015-12-27 04:57:12 【问题描述】:我想知道:是否可以在 spring applicationContext.xml 中为 PropertyPlaceholderConfigurer 设置属性文件相对于 xml 文件本身的位置?
所以当 applicationContext.xml 和 dataSource.properties 文件在同一个目录下时: 像这样的东西会起作用,还是 Spring 找不到文件,因为我必须修改 location-property 值?
<bean id="dataSourceProperties"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="dataSource.properties" />
</bean>
提前谢谢你!
【问题讨论】:
你测试过它并且它有效吗?它应该。 现在我做到了 - 它没有:原因:org.springframework.beans.factory.BeanInitializationException:无法加载属性;嵌套异常是 java.io.FileNotFoundException: dataSource.properties (No such file or directory) at org.springframework.beans.factory.config.PropertyResourceConfigurer.postProcessBeanFactory(PropertyResourceConfigurer.java:89) 所以我想知道如何简单地解决这个问题尽可能:) 【参考方案1】:把你的dataSourceProperties.properties
文件放到resources
文件夹下,修改你的dataSourceProperties
bean如下:
<bean id="dataSourceProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="locations">
<list>
<value>classpath*:dataSource.properties</value>
</list>
</property>
</bean>
并在您的类定义中获取属性,如下所示:
@WebService
@Component
public class MyService
@Value("$databaseDriver")
private String databaseDriver;
....
另外,获取完整的属性文件,如下:
@Component
public class MyService
@Resource(name="dataSourceProperties")
private Properties dataSourceProperties;
....
dataSource.properties:
databaseDriver=oracle.jdbc.driver.OracleDriver
【讨论】:
【参考方案2】:不,这不起作用。
位置的“值”不会以 applicationContext.xml 的位置作为“根目录”开始。它将使用启动 spring 应用程序的目录。
也许其他人也会有这个问题:P
【讨论】:
以上是关于在 Spring ApplicationContext 中设置 PropertyPlaceholderConfigurer 相对于 applicationContext.xml 的位置的主要内容,如果未能解决你的问题,请参考以下文章
ContextLoader和ContextLoaderListener