2016-08-15 161 views
2

我有一個彈簧啓動應用程序,我添加了駱駝路線。定義路由的類擴展了FatJarRouter並用@Component註釋。當應用程序作爲彈簧啓動應用程序運行時,路徑不會被識別。但是,如果我使用@SpringBootApplication註釋在主類中編寫路由,則會標識路由。這是它現在如何顯示在日誌中:阿帕奇駱駝路線不確定

o.a.camel.spring.SpringCamelContext:共有0個路由,其中​​0個已啓動。 oacamel.spring.SpringCamelContext:Apache的駱駝2.17.2(CamelContext:駱駝-4):

@Override 
public void configure() throws Exception{ 
from("file:\\input").to("file:\\output"); 
} 

請告訴我如何在0.026秒

與路線的方法也與覆蓋註釋爲啓動我可以在將它作爲一個單獨的課程而不是主要課程編寫時識別路線。有什麼缺失嗎?

+0

你可以顯示camelContext初始化嗎?我認爲[這篇文章將幫助你](http://camel.apache.org/spring-boot.html) –

回答

2

我的猜測是您沒有正確運行Spring Boot,或者您的FatJarRouter不在Spring Boot的組件掃描路徑中。比方說,你有一個春天啓動應用程序類:

package com.example; 

import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 

@SpringBootApplication 
public class DemoApplication { 

    public static void main(String[] args) { 
     ApplicationContext ctx = SpringApplication.run(DemoApplication.class, args); 
     System.out.println("Printing out "); 

     Map<String, RouteBuilder> routeBuilders = 
      ctx.getBeansOfType(RouteBuilder.class); 
     System.out.println(routeBuilders); 

     CamelSpringBootApplicationController applicationController = 
      ctx.getBean(CamelSpringBootApplicationController.class); 
     applicationController.run(); 
    } 
} 

FatJarRouter必須在同一包(在這種情況下com.example)或子包,例如com.example.camel

package com.example.camel; 

import org.apache.camel.Exchange; 
import org.apache.camel.spring.boot.FatJarRouter; 
import org.springframework.stereotype.Component; 

@Component 
public class DemoRouteBuilder extends FatJarRouter { 

    @Override 
    public void configure() throws Exception { 
     from("timer:sender?delay=3000&period=5000") 
      .log("Ping!"); 
    } 
} 
+0

該路由是在主要的Spring引導應用程序類的子包中。我如何檢查子包或其他包是否在Spring引導的類路徑中。所有的軟件包都是src文件夾的一部分。 – Megha

+1

那麼它肯定必須拿起。除非你有自己的'@ ComponentScan'覆蓋默認的。你可以分享你的'@ SpringBootApplication'類和你的路由器嗎? –