1

我正在使用 Java 1.6 和 Spring 3.1.1。我正在尝试将外部属性文件读入 Spring 上下文。这是症结所在:第一个属性文件包含下一个属性文件的路径。例子:

${user.home} 中的第一个属性文件:

resource.dir=C:/users/smith
config.dir=${resource.dir}/configuration

第二个属性文件 ${config.dir}(在第一个属性文件中定义):

datasource.name=jdbc:mysql://dbserver:3306/test
datasource.prop1=etc
datasource.prop2=etc

所以我需要读取第一个文件,处理这些属性,然后使用它们来访问第二个文件。

使用 Spring PropertyPlaceholderConfigurer 只会让我进入第一个文件。我读到您的应用程序上下文中只能有一个 PropertyPlaceholderConfigurer,这似乎是真的。[编辑:有关说明,请参见 https://jira.springsource.org/browse/SPR-6428。]

有人知道最好的方法吗?

编辑:如果您在 ant 中运行构建,这显然很容易做到,不幸的是我的项目使用 Maven。您使用 PROPERTY 标记执行第一步,它“自动”解析下一步的所有内容,允许您将类路径设置为 ${cfg.dir} 目录等。然后您可以“正常”从这些目录。我希望 Spring 或 Maven 允许我使用相同的功能,但还没有找到答案......

蚂蚁示例:

<property file="${user.home}/global.properties" />

<target name="run-some-stuff">
    <java classname="com.mystuff.App" failonerror="true" fork="yes">
        <classpath>
            <path location="${cfg.dir}" />
            <path location="${resource.dir}" />
        </classpath>
        </java>
    </target>
4

1 回答 1

1

如果资源目录只是用户的主目录,您可以在 xml 中执行以下操作...

<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">

  <context:property-placeholder location="file:${user.home}/configuration"/>
</beans>

或者,如果您更喜欢在代码中执行此操作,也可以使用@PropertySource注解

这是因为在 Spring 3.1 中,PropertySource 抽象统一了来自系统属性、环境变量以及属性文件的属性。user.home 是系统属性。

于 2012-08-14T20:36:30.527 回答