【问题标题】:Importing/Filtering properties in Spring context在 Spring 上下文中导入/过滤属性
【发布时间】:2012-08-14 17:52:50
【问题描述】:

我使用的是 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 能够为我提供相同的功能,但还没有找到答案......

ANT 示例:

<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>

【问题讨论】:

  • 这可能对您没有帮助,但是可以有多个占位符配置器;您可以为每个配置器分配不同的占位符前缀。
  • 没错,但在这种情况下这对我没有帮助。我在这里找到了限制的解释:jira.springsource.org/browse/SPR-6428

标签: java spring


【解决方案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 是系统属性。

【讨论】:

  • 不幸的是,这只能让我走到一半——然后我需要读取属性文件并过滤它,用“真实值”替换占位符——然后去获取另一组属性文件。 Spring 似乎对此非常不满。
猜你喜欢
  • 1970-01-01
  • 2011-03-01
  • 2013-07-01
  • 1970-01-01
  • 2019-04-24
  • 2012-05-30
  • 1970-01-01
  • 2013-01-14
  • 2021-08-29
相关资源
最近更新 更多