春のプレースホルダーで繰り返しを避けるにはどうすればよいですか? 通常、すべてのプロパティをロードし、後でそれらを 1 つずつ使用して、すべてを 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にはすでにそのようなものがあります(より良い構文で)。