2013-10-18 52 views
6

Przeczytałem następującą stronę o właściwościach Camel: http://camel.apache.org/using-propertyplaceholder.html, a także przeczytaniu książki "Camel In Action".Jak załadować Własność Wielbłąda do Fasoli?

znalazłem w rozdziale 6 „Camel w działaniu” bardzo pomocne przy określaniu właściwości wielbłądzie, i mogę załadować trzy następujące właściwości z moich config.properties:

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

Kiedy uruchamiam mojego kodu Java I” m mogli zobaczyć trzy następujące wartości wewnątrz mojego wielbłąda trasie w moim applicationContext.xml, jak pokazano w tym wątku # 0 wiadomości poniżej:

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 

jednak, gdy próbuję przekazać zmienną {{config.defaultViz} } do String nazwanego defaultViz w mojej klasie Java SensorGenerator, oraz prin t ten ciąg otrzymuję "{{config.defaultViz}}" na konsoli zamiast wartości zawartej w {{config.defaultViz}}.

Innymi słowy, oto co widzę na ekranie:

Returning List 
defaultViz= {{config.defaultViz}} 

ale naprawdę chcę to zobaczyć na ekranie:

Returning List 
defaultViz=a 

Więc co robię źle w moim ApplicationContext .xml?

AKTUALIZACJA: Problem polegał na tym, że musiałem dodać most między wiosenną a wielbłądzią, jak opisano w linku, do którego się odwołałem powyżej.

Oto mój AKTUALIZACJA applicationContext.xml z mostu:

<?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> 

Znalazłem to pytanie, które jest podobny, ale nie całkiem to samo: Injecting property into bean

Odpowiedz

12

Zapis {{}} prostu działa wewnątrz trasach (tzn wewnątrz konteksty wielbłądów XML). Aby użyć go w komponencie bean, myślę, że musisz zdefiniować mostek zastępczy właściwości, który oferuje wielbłąd, ale w twojej fasoli używaj notacji ${}. Wyjaśnienie, w jaki sposób korzystać z tego mostu, znajduje się w podanym przez Ciebie łączu.

+2

Dzięki! To się udało. Dodałem Bridge i teraz dostaję mój defaultViz. Zaktualizuję plik applicationContext.xml do tego, co mam teraz. Może przyda się komuś innemu w przyszłości. :-) – erj2code

+0

To dość dziwne, że wszystkie właściwości w folderze etc// są niewidoczne dla kontekstu sprężyn. Wygląda na to, że kontekst kontekstu i kontekstu kontekstu są ładowane niezależnie. Nawet fasola zadeklarowana w Planie nie jest widoczna w kontekście wiosny. wygląda na to, że bridge jest jedynym sposobem na kontekst Spring, np. \t \t