如何避免重复使用弹簧占位符?通常我会加载所有属性,然后一个一个地使用它们,将所有内容重复 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>
我知道,写起来并不难,但也许 spring 已经有了类似的东西(语法更好)。