Wie lade ich ein Kamel-Eigenschaft in ein Bean?
Habe ich gelesen, auf der folgenden Seite Camel Eigenschaften: http://camel.apache.org/using-propertyplaceholder.html und lese auch das Buch "Camel In Action".
Fand ich Kapitel 6 "Camel In Action" sehr hilfreich bei der Festlegung Camel Eigenschaften, und ich kann laden Sie die folgenden drei Eigenschaften aus meiner config.Eigenschaften:
config.timeout=10000
config.numSamples=1000
config.defaultViz=a
Wenn ich mein Java-code, ich bin in der Lage zu sehen, die folgenden drei Werte in meinem camel-route in mein applicationContext.xml wie im thread#0 Nachrichten unter:
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
Jedoch, wenn ich versuche, übergeben Sie die variable {{config.defaultViz}} in einen String namens defaultViz in meinem SensorGenerator Java-Klasse, und drucken Sie den string bekomme ich "{{config.defaultViz}}" auf der Konsole statt der enthaltenen Wert innerhalb von {{config.defaultViz}}.
In anderen Worten, hier ist, was ich auf dem Bildschirm sehen:
Returning List
defaultViz= {{config.defaultViz}}
Aber ich will wirklich sehen, diese auf den Bildschirm:
Returning List
defaultViz=a
Also, was mache ich falsch in meinem applicationContext.xml?
AKTUALISIERT: Das Problem war, dass ich brauchte, um hinzuzufügen eine Brücke zwischen Spring und Camel, wie beschrieben in dem link, den ich oben verwiesen.
Hier ist meine AKTUALISIERTE applicationContext.xml mit der Brücke:
<?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&period={{config.timeout}}" />
<camel:to uri="log:hello.world.request?level=INFO&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&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>
Fand ich diese Frage, die ähnlich ist aber nicht ganz das gleiche: Die Injektion property in bean
InformationsquelleAutor erj2code | 2013-10-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
{{}}
notation funktioniert einfach innerhalb der Routen (dh innerhalb der XML-camel zusammenhängen). Verwenden Sie es in der bean-ich glaube, Sie müssen definieren Sie die Eigenschaft Platzhalter Brücke, camel bietet aber in Ihrem bean verwenden Sie die${}
notation. Die Erklärung, wie zu verwenden, dass die Brücke ist in dem link, den Sie zur Verfügung gestellt haben.Seine ziemlich seltsam, dass alle Eigenschaften in die/ etc / Ordner nicht sichtbar zu spring-Kontext. Es scheint, dass der Frühling Kontext und blueprint-Kontext geladen werden, unabhängig. Auch die bean-deklariert die Blaupause ist nicht sichtbar im spring-Kontext. sieht aus wie die Brücke ist die einzige Möglichkeit für den Frühling Kontext, D. H. <bean id="bridgePropertyPlaceholder" class="org.apache.camel.Frühling.spi.BridgePropertyPlaceholderConfigurer"> <property name="location" value="file:PropertyLocation"/> </Bohne>
InformationsquelleAutor hveiga