1

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

4

0 に答える 0