在 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 的位置的主要内容,如果未能解决你的问题,请参考以下文章

Spring + Hibernate + JPA [关闭]

Spring Web 项目Junit测试报错问题

Spring 类构造器初始化实例

ContextLoader和ContextLoaderListener

ContextLoader和ContextLoaderListener

面试阿里,字节,美团必看的Spring的Bean管理详解