PropertyPlaceholderConfigurer:我可以拥有动态位置值

时间:2013-04-21 01:27:24

标签: java

现在我在我的xml文件中有这个:

         <bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/dashboardsupervisor" />
    <property name="username" value="root" />
    <property name="password" value="${jdbc.password}" />
</bean>

            <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
    <value>file:C:/jdbc.properties</value>
  </property>
</bean>

现在,我的问题是我不知道这个文件的确切位置(jdbc.properties),因为这个应用程序将在不同的计算机上运行,​​在某些地方它安装在c:中,有时可能在f上:..所以,如果我不知道这个文件的路径,无论如何我都能找到它。

感谢

4 个答案:

答案 0 :(得分:13)

您可以将文件位置定义为系统属性,例如-Dprops.file = file:c:/1.properties

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
    <value>$props.file</value>
  </property>
</bean>

<context:property-placeholder location="${props.file}"/>

或者您可以扫描文件系统

public class ScanningPropertyPlaceholderConfigurer extends org.springframework.beans.factory.config.PropertyPlaceholderConfigurer {
    @Override
       public void setLocation(Resource location) {
       File file = findFile(fileName);  // implement file finder
       super.setLocation(new FileSystemResource(file));
    }
}

答案 1 :(得分:2)

PropertyPlaceholderConfigurer configurer = new PropertyPlaceholderConfigurer();
configurer.setLocation(new ClassPathResource("context.properties"));

ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"}, false);
applicationContext.addBeanFactoryPostProcessor(configurer);
applicationContext.refresh();

答案 2 :(得分:0)

是。您可以让Spring在类路径中找到该文件。该文件可以存在于不同机器上的不同位置,但只要它存在于类路径中就会被加载。

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
   <property name="location">
      <value>classpath:jdbc.properties</value>
   </property>
</bean>

答案 3 :(得分:0)

可以有多种方法来处理它。

  1. 将文件放入项目中,这样您就可以始终拥有相同的相对路径。
  2. 在构建期间填充值,即将占位符放在值标记中,并在构建期间通过传递参数替换它。例如如果您使用ant进行构建,则可以使用expandproperties任务执行此操作。