2017-07-27 1 views
0

Ich habe gerade begonnen, Camel in einem meiner Projekte zu verwenden. Ich versuche Camel mit Spring zu konfigurieren, habe aber Probleme damit.
Ich möchte keine XML-Konfiguration verwenden, sondern gehe mit Spring-basierten Anmerkungen zur Konfiguration von Routen und Prozessoren.CamelContext nimmt nicht an Frühlingsnotierte Routen

Meine App ist eine eigenständige Spring-Anwendung, die als Jar ausgeführt wird. Damit die App läuft, habe ich eine leere geplante Methode, die alle x min ausgeführt wird.

Im Folgenden sind die Abhängigkeiten in meinem build.gralde

// Spring // 
compile('org.springframework:spring-core:5.0.0.RC2') 
compile('org.springframework:spring-context:5.0.0.RC2') 
compile('org.springframework:spring-beans:5.0.0.RC2') 
compile('org.springframework:spring-context-support:5.0.0.RC2') 
// Apache // 
// Camel // 
compile('org.apache.camel:camel-core:2.19.1') 
compile('org.apache.camel:camel-spring:2.19.1') 

Schnappschuss beans.xml

<context:annotation-config/> 
<tx:annotation-driven/> 
<context:component-scan base-package="my.package" /> 

<camelContext id="aggregatorCamelContext" autoStartup="true" xmlns="http://camel.apache.org/schema/spring"> 
     <package> 
      my.package.camel 
     </package>   
</camelContext> 

Probe RouteBuilder

@Component 
public class SampleRoute extends RouteBuilder { 

    @Autowired 
    MyClass myObject; 

    @Override 
    public void configure() throws Exception { 

     from("file:filelist") 
      .process(myObject) 
      .to("file:processedList"); 
    } 

} 

die App am Leben zu halten (ich wenig hacky weiß, aber genügt für jetzt) ​​

@Component 
@EnableScheduling 
public class KeepitAlive { 

    @Scheduled(fixedRate = 1000l) 
    public void run(){ 
     System.out.println("KeepitAlive.run "+ Thread.currentThread().getName()); 
    } 
} 

Hauptklasse. Ich habe sowohl die Methoden versucht, Frühling Kontext Initialisierung sowie Camel Main, aber ohne Glück

public class MyApplication { 

    public static void main(String[] args) throws Exception { 
     /*AbstractXmlApplicationContext context = 
       new ClassPathXmlApplicationContext("path/to/beans.xml");*/ 

     Main main = new Main(); 
     main.setApplicationContextUri("path/to/beans.xml"); 
     main.start(); 
    } 

} 

Wenn ich meine Route innerhalb camelContext Erklärung setzen sich, funktioniert es absolut in Ordnung,

<route> 
     <from uri="file:filelist"/> 
     <to uri="file:processedlist"/> 
    </route> 

I habe auch in Camel Spring Integration documentation untersucht, aber es enthält auch XML-basierte Konfiguration.
Könnte jemand bitte mich in die richtige Richtung führen.

+1

Verwenden Sie die 'run' Methode auf der' Main' Klasse Wenn es von Apache Camel. Siehe diese FAQ: http://camel.apache.org/running-camel-standalone-and-have-it-keep-running.html –

Antwort

0

Letztendlich herausgefunden. Müssen SpringRouteBuilder statt RouteBuiler oben in SampleRoute Klasse zu erweitern.
Jeder, der mit Problemen kämpft, schlage ich einmal vor, Camel in Action Buch zu gehen.
Irgendwie habe ich es am Anfang vermisst, was mir viel Zeit gekostet hat, triviale Dinge herauszufinden, die dieses Buch abdeckt.

0

Sie Camel eigenen Paket-Scanning über

<package> my.package.camel </package>

Sie sollten <contextScan> verwenden, wenn Sie Camel die Feder @Component Camel Routen finden möchten.

Siehe Camel Frühjahr Dokumentation für mehr: http://camel.apache.org/spring.html

+0

Ich versuchte mit auch, aber Camel war nicht in der Lage, automatisch zu entdecken. Ich habe nicht 'Methode' auf 'Main' versucht, obwohl Sie im Kommentar erwähnt haben. Es scheint mit 'main.run() 'Methode anstelle von' main.start() 'mit' RouteBuilder' zu funktionieren. Danke für Ihre Hilfe. – Bond

+0

Camel unterstützt Spring 5.0.x nicht offiziell. Wir haben noch nicht einmal versucht, diese Version zu aktualisieren und zu testen. Dies wird offiziell in einer späteren Camel-Version unterstützt, wenn Spring 5 GA ist und wir uns auf das Upgrade konzentrieren. –

+0

Verstanden. Ich vermutete das Gleiche. Ich werde sehen, ob ich die Version herunterstufen könnte. – Bond

Verwandte Themen