在春天过滤属性和占位符

时间:2013-04-21 14:24:56

标签: java spring properties configuration placeholder

如何避免弹簧占位符的重复?通常我加载所有属性,然后逐个使用它们,重复所有内容3次(属性文件,属性名称来自xml,占位符名称):

<context:property-placeholder location="classpath:/spring/application.properties,
                                        classpath:/spring/${env}.properties" />

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="properties">
            <value>
                user = ${db.user}
                password = ${db.passwd}
            </value>
        </property>
</bean>

我能做到:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="properties" ref="allProperties"/>
</bean>

然而,这不是一个好的解决方案,因为:

  • 如果我有很多组件,那么可能会有一些属性冲突
  • 我不想传递密码
  • 我也不想按每个组件拆分配置文件。我希望每个环境有1个全局文件和1个文件。拆分属性会使维护变得难以维持

所以问题是: 是否有任何东西可以让我选择应该传递的属性(通过前缀)?类似的东西:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="properties">
            <bean class="...PropertiesFilter">
                <property name="prefix" value="c3p0"/>
                <property name="src" ref="allProperties"/>
            </bean>
        </property>
</bean>

我知道,写起来并不难,但也许春天已经有了类似的东西(语法更好)。

0 个答案:

没有答案