2016-10-10 8 views
0

私はApache Camel 2.16.0 with Spring DSLを使用しています 私はSpringのコンテキストXMLを持っています。このコンテキストでは、次のようにさまざまなファイルからプロパティを読み込むためにPlaceHolderを定義しました。これは正常に動作しますApache Camel Spring DSL(環境変数HOSTNAMEを参照)

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="org.gjt.mm.mysql.Driver"/> 
    <property name="url" value="${${LIVE_}DATASOURCE_URL}"/> 
    <property name="username" value="${${LIVE_}DATASOURCE_USERNAME}"/> 
    <property name="password" value="${${LIVE_}DATASOURCE_PASSWORD}"/> 
</bean> 

、私は豆が作成されて見ることができます -

<bean id="propertyPlaceholder" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/> 
    <property name="ignoreResourceNotFound" value="false"/> 
    <property name="locations"> 
     <list> 
      <value>classpath:/properties/versioning.properties</value> 
      <value>classpath:/properties/#{inetAddress.hostName}.properties</value> 
     </list> 
    </property> 
</bean> 
<bean id="inetAddress" class="java.net.InetAddress" factory-method="getLocalHost"/> 

プロパティの値は、次のような他の豆を構築するために使用されています。 同じアプリケーションに別のSpring Context XMLがあり、これにはキャメルコンテキストがあり、同じプロパティファイルで定義された他のいくつかのプロパティを使用したいと思います。私はラクダが春のプロパティプレースホルダをサポートしていることを知って、文脈から抜粋下記参照 -

- このコンテキストの一部として

<camelContext id="charge-process-context" xmlns="http://camel.apache.org/schema/spring"> 
    <propertyPlaceholder id="properties" 
     location="classpath:/properties/versioning.properties, 
          properties/${env:HOSTNAME}.properties" 
     xmlns="http://camel.apache.org/schema/spring" /> 
    ..... 
    ..... 
</camelContext> 

、私はそのような以下のようにプロパティファイルからの値を使用してHTTPSコンポーネントを使用するルートを持っています

<to uri="https4:{{LIVE_AUTH_RESPONSE_HOST}}:{{LIVE_AUTH_RESPONSE_PORT}}/{{LIVE_AUTH_RESPONSE_CONTEXT_PATH}}"/> 

このルートは起動し、次の例外をスローしません -

Caused by: java.lang.IllegalArgumentException: Cannot find system environment with key: HOSTNAME 
    at org.apache.camel.util.FilePathResolver.resolvePath(FilePathResolver.java:54) 
    at org.apache.camel.component.properties.PropertiesComponent.parseLocations(PropertiesComponent.java:434) 
    at org.apache.camel.component.properties.PropertiesComponent.parseUri(PropertiesComponent.java:163) 
    at org.apache.camel.component.properties.PropertiesComponent.parseUri(PropertiesComponent.java:148) 
    at org.apache.camel.impl.DefaultCamelContext.resolvePropertyPlaceholders(DefaultCamelContext.java:2261) 
    at org.apache.camel.model.ProcessorDefinitionHelper.resolvePropertyPlaceholders(ProcessorDefinitionHelper.java:730) 
    at org.apache.camel.model.ProcessorDefinition.createOutputsProcessorImpl(ProcessorDefinition.java:427) 
    at org.apache.camel.model.ProcessorDefinition.createOutputsProcessor(ProcessorDefinition.java:413) 
    at org.apache.camel.model.ProcessorDefinition.createOutputsProcessor(ProcessorDefinition.java:165) 
    at org.apache.camel.model.ExpressionNode.createFilterProcessor(ExpressionNode.java:109) 
    at org.apache.camel.model.WhenDefinition.createProcessor(WhenDefinition.java:74) 
    at org.apache.camel.model.WhenDefinition.createProcessor(WhenDefinition.java:32) 
    at org.apache.camel.model.ProcessorDefinition.createProcessor(ProcessorDefinition.java:483) 
    at org.apache.camel.model.ChoiceDefinition.createProcessor(ChoiceDefinition.java:135) 
    at org.apache.camel.model.ProcessorDefinition.makeProcessorImpl(ProcessorDefinition.java:534) 
    at org.apache.camel.model.ProcessorDefinition.makeProcessor(ProcessorDefinition.java:495) 
    at org.apache.camel.model.ProcessorDefinition.addRoutes(ProcessorDefinition.java:219) 
    at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:1069) 

ご注意:私は、AWS上のTomcat 8上のwarファイルとして自分のアプリケーションを展開していますインスタンス。 私はWindows環境で開発環境を持っており、これはWindows OS上で動作することがわかりました。私は、Apache Camel 2.16のFilePathResolver.javaファイルがSystem.getenv(key)を使用してSystem.getenv( "HOSTNAME")という値を取得していることも確認しました。これはAWSインスタンスとWindows 10の正しい値を返します。また、ENVを使用してみました:ホスト名(UNIX用の小さな小文字)まだ運...

答えて

0

私はそれは次のように言及

ブリッジング春とラクダのプロパティプレースホルダでhttp://camel.apache.org/using-propertyplaceholder.html で解決策を見つけた -

をSpring Frameworkでは、Apache Camelのようなサードパーティ製のフレームワークをSpringプロパティのプレースホルダーメカニズムにシームレスにフックすることはできません。ただし、Spring org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer型(Spring org.springframework.beans.factory.config.PropertyPlaceholderConfigurer型)でSpring Beanを宣言することにより、SpringとCamelを簡単にブリッジすることができます。