2013-10-18 17 views
6

私はキャメルのプロパティで次のページを読んでいます:http://camel.apache.org/using-propertyplaceholder.htmlと "Camel In Action"という本を読んでいます。 CamelプロパティをBeanにロードするにはどうすればよいですか?

私はキャメルのプロパティを定義する際に非常に役立つ「アクションではキャメル」の第6章を発見し、私は私のconfig.propertiesから、次の3つのプロパティを読み込むことができます。私は私のJavaコードを実行すると、私は」

config.timeout=10000 
config.numSamples=1000 
config.defaultViz=a 

しかしながら

14669 [Camel (HelloWorldContext) thread #0 - timer://hello.world.request.timer] INFO route1 - printing values read from config.properties file 
14669 [Camel (HelloWorldContext) thread #0 - timer://hello.world.request.timer] INFO route1 - config.timeout= 10000 
14669 [Camel (HelloWorldContext) thread #0 - timer://hello.world.request.timer] INFO route1 - config.numSamples= 1000 
14670 [Camel (HelloWorldContext) thread #0 - timer://hello.world.request.timer] INFO route1 - config.defaultViz= a 

Iが変数{{config.defaultViz}を通過しようとすると、0メッセージの下にスレッド#に示すように、私のapplicationContext.xmlをの私のラクダ経路内の次の3つの値を見ることができ、M }私のSensorGenerator JavaクラスのdefaultVizという文字列に、prinその文字列{{config.defaultViz}} "は{{config.defaultViz}}に含まれている値ではなくコンソールに表示されます。

Returning List 
defaultViz= {{config.defaultViz}} 

しかし、私は実際に画面上でこれを見たい:つまり

は、ここで私は画面に表示されるものだ

Returning List 
defaultViz=a 

だから私は、私のApplicationContextに間違って何をやっています.xml?

UPDATED:私が上で参照したリンクに概説されているように、SpringとCamelの間にブリッジを追加する必要があるという問題がありました。

ここブリッジと私のUPDATED applicationContext.xmlをです:

<?xml version="1.0" encoding="UTF-8"?> 

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:camel="http://camel.apache.org/schema/spring" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:util="http://www.springframework.org/schema/util" 
    xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/util  http://www.springframework.org/schema/util/spring-util-3.0.xsd 
     http://camel.apache.org/schema/spring  http://camel.apache.org/schema/spring/camel-spring.xsd 
     http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context.xsd"> 

    <bean 
      class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" /> 
    <context:component-scan base-package="com.data.world2" /> 
    <context:annotation-config /> 

    <camel:camelContext id="HelloWorldContext"> 

<!--  Add Jackson library to render Java Map into JSON --> 
     <camel:dataFormats> 
      <camel:json id="jack" library="Jackson"/> 
     </camel:dataFormats> 

     <camel:route> 
      <!-- sends a request to the hello world JMS queue every 10 seconds --> 
      <camel:from 
       uri="timer://hello.world.request.timer?fixedRate=true&amp;period={{config.timeout}}" /> 
      <camel:to uri="log:hello.world.request?level=INFO&amp;showAll=true" /> 
      <camel:bean ref="helloWorld" /> 

      <!-- now print out the map in JSON format --> 
      <camel:marshal ref ="jack"/> 
      <camel:convertBodyTo type="java.lang.String" /> 
      <camel:log message="${body}"/> 

      <!-- print out values read from config.properties file --> 
      <camel:log message="printing values read from config.properties file"/> 
      <camel:log message="config.timeout= {{config.timeout}}"/> 
      <camel:log message="config.numSamples= {{config.numSamples}}"/> 
      <camel:log message="config.defaultViz= {{config.defaultViz}}"/> 

      <!-- now log the message --> 
      <camel:to uri="log:hello.world.response?level=INFO&amp;showAll=true" /> 

     </camel:route> 

    </camel:camelContext> 

<!-- creates a java.util.Properties instance with values loaded from the supplied location --> 
<util:properties id="sensorProperties" location="classpath:/sensor.properties"/> 

    <!-- pass in sensor.properties and defaultViz from config.properties --> 
    <bean class="com.data.world2.SensorGenerator"> 
     <property name="sourceProperties" ref="sensorProperties" /> 
     <property name="defaultViz" value="${config.defaultViz}"/> 
    </bean> 

<!-- declare a Spring bean to use the Camel Properties component in Spring XML --> 
    <bean id="properties" 
      class="org.apache.camel.component.properties.PropertiesComponent"> 
     <property name="location" value="classpath:config.properties"/> 
    </bean> 
<!-- bridge spring property placeholder with Camel --> 
<!-- you must NOT use the <context:property-placeholder at the same time, only this bridge bean --> 
    <bean id="bridgePropertyPlaceholder" class="org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer"> 
     <property name="location" value="classpath:config.properties"/> 
    </bean> 

</beans> 

私は似ていますが、全く同じではない、この質問を見つけました:Injecting property into bean

答えて

12

{{}}表記は、単にルート内で動作します(つまり、内部XMLのラクダのコンテキスト)。それをBeanで使用するには、Camelが提供するプロパティプレースホルダーブリッジを定義する必要があると思いますが、Beanでは${}表記を使用します。そのブリッジを使用する方法の説明は、あなたが提供したリンクにあります。

+2

ありがとうございます!それはうまくいった。私は橋を追加し、今私は私のdefaultVizを取得します。私は現在applicationContext.xmlを更新します。たぶん将来他の誰かに役立つでしょう。 :-) – erj2code

+0

etc/folderのすべてのプロパティがSpringコンテキストでは見えないのはかなり奇妙です。春のコンテキストと青写真のコンテキストは独立してロードされているようです。青写真で宣言されたBeanも、春の文脈では見えません。 \t \t

関連する問題