0

project-web と project-service の 2 つのプロジェクトがあり、どちらも Spring コア 3.1.3 を使用し、対応するプロパティ ファイルからプロパティをロードするための構成があります。

project-web -- Spring Integration ベースのプロジェクト。Spring 構成ファイル内:

<context:property-placeholder location="WEB-INF/spring-integration/spring-integration.properties" ignore-resource-not-found="true" />    
<import resource="classpath*:META-INF/spring/applicationContext.xml" />

インポートには、project-service からのスプリング構成ファイルが含まれます。project-service プロジェクトでは、次のように構成しました。

<context:property-placeholder location="classpath:META-INF/application.properties, classpath:META-INF/db.properties"  ignore-resource-not-found="true"/>
<import resource="classpath:META-INF/spring/applicationContext-data.xml"/>

私が持っているapplicationContext-data.xml内に、DAOのSpring構成を含めるためのインポート:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
       <property name="driverClassName" value="${db.${db.type}.driver}" />
       <property name="url" value="${db.${db.type}.url}"/>
       <property name="username" value="${db.${db.type}.username}" />
       <property name="password" value="${db.${db.type}.password}" />       
    </bean>

project-service の単体テストを実行すると、すべて問題なく、すべての変数が問題なく正しく解決されます。しかし、project-web を実行すると (project-service は project-web の WEB-INF/lib フォルダーに .jar ファイルとして含まれます)、起動時に ${db.type を解決できないというエラーがスローされます。 }:

" db.${db.type}.driver" at org.springframework.beans.factory.config.PlaceholderConfigurerSupport.doProcessProperties(PlaceholderConfigurerSupport.java:209) ~[spring-beans-3.1.3.RELEASE.jar:3.1.3. RELEASE] at org.springframework.context.support.PropertySourcesPlaceholderConfigurer.processProperties(PropertySourcesPlaceholderConfigurer.java:174) ~[spring-context-3.1.3.RELEASE.jar:3.1.3.RELEASE] at org.springframework.context.support. PropertySourcesPlaceholderConfigurer.postProcessBeanFactory(PropertySourcesPlaceholderConfigurer.java:151) ~[spring-context-3.1.3.RELEASE.jar:3.1.3.リリース] ...................

注: project-service は他のプロジェクトでも使用されるため、project-web ですべてを宣言することはできません。project-service が単独で実行されている場合は機能するが、project-web に含まれている場合は機能しない理由を知っている人はいますか? ネストされた変数 ${db.type} を解決できません

4

1 に答える 1

2

問題は、最初PropertyPlaceHolderConfigurerのプレースホルダーが2番目のプレースホルダーで解決する必要のあるプレースホルダーを解決しようとしていることです。

それぞれに異なるプレフィックスを使用するか(たとえば、それらの1つでは!{なく${)、設定することができます

ignore-unresolvable="true"

最初のもので-それからそれは他のものに解決を任せます。

于 2013-02-06T22:06:52.050 に答える