1

Spring のプロパティ プレースホルダーを使用してプロパティ ファイルの読み込みを制御し、システム プロパティを設定したいと考えています。これは次のように機能します。

  <context:property-placeholder
location="classpath:jdbc/jdbc.${TARGET_ENV}.properties" />

アプリケーションを別の環境で実行すると、システム プロパティ TARGET_ENV を設定すると、正しいプロパティ ファイルが取得されます。

これで統合テストができました。特定のプロパティ ファイル (jdbc.INTEGRATION_TESTS.properties) を常にロードするように構成を強制したいと考えています。

私は持っている

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
    "classpath:/META-INF/spring/set-system-property.xml", 
    "classpath:/META-INF/spring/applicationContext.xml"}) 
public class AbstractIntegrationTest extends AbstractTransactionalJUnit4SpringContextTests {

および set-system-property.xml ( Set System Property With Spring Configuration Fileのアドバイスを使用):

<beans>
<bean id="systemPrereqs"
    class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="targetObject" value="#{@systemProperties}" />
    <property name="targetMethod" value="putAll" />
    <property name="arguments">
        <util:properties>
            <prop key="TARGET_ENV">INTEGRATION_TESTS</prop>
        </util:properties>
    </property>
</bean>

しかし、プロパティはSpringによって取得されません:

Caused by: java.io.FileNotFoundException: class path resource [jdbc/jdbc.${TARGET_ENV}.properties] cannot be opened because it does not exist
at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:157)

これが機能しないのはなぜですか?Bean のインスタンス化、ファクトリ Bean などについて、取得していないものはありますか?

4

1 に答える 1

0

よくわかりませんが、Spring コンテキスト ファイルからシステム プロパティを設定するのはまだ遅すぎませんか? 同様のセットアップを使用しますが、テストのシステム プロパティを変更する代わりに、プロパティをロードするための固定パスを使用する test-context.xml を使用します。

たとえば、テストでは:

    <bean id="bridgePropertyPlaceholder" class="org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>classpath:be/xxx/broker/standalone-test.properties</value>
        </list>
    </property>   
</bean>       

    <bean id="bridgePropertyPlaceholder" class="org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>${BROKER_CONF}</value>
        </list>
    </property>   
</bean>

実際の文脈で。

Camel プロパティ プレースホルダーを使用していることは無視してください。通常の Spring プロパティ プレースホルダーでもこれを行いますが、現在は例を見つけることができませんでした。

于 2013-01-16T15:34:15.637 に答える