CamelContext没有拿起Spring注释的路由

时间:2017-07-27 06:37:35

标签: spring apache-camel

我刚开始在我的一个项目中使用Camel。我正在尝试使用Spring配置Camel,但是遇到了这样的问题 我不想使用xml配置,而是使用基于Spring的Annotations来配置路由和处理器。

我的应用程序是一个独立的Spring应用程序,它将作为Jar运行。 为了让应用程序保持运行,我有一个空的预定方法,每隔x分钟运行一次。

以下是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')

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>

示例RouteBuilder

@Component
public class SampleRoute extends RouteBuilder {

    @Autowired
    MyClass myObject;

    @Override
    public void configure() throws Exception {

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

}

让应用程序保持活力(我知道有点hacky,但现在已经足够了)

@Component
@EnableScheduling
public class KeepitAlive {

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

主类。我已经尝试了两种方法,初始化Spring上下文以及Camel Main,但没有运气

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();
    }

}

如果我将自己的路径放在camelContext声明中,它可以正常工作,

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

我也研究过Camel Spring Integration documentation,但它也包含基于xml的配置 请有人指导我正确的方向。

2 个答案:

答案 0 :(得分:0)

最终想出来。需要在SpringRouteBuilder类中扩展RouteBuiler而不是SampleRoute 任何人都在努力解决问题,我建议一旦完成Camel in Action本书 不知何故,我在一开始就错过了它,这花费了我很多时间来弄清楚这本书所涉及的琐碎事情。

答案 1 :(得分:0)

您正在使用Camel自己的包裹扫描

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

如果您希望Camel找到Spring <contextScan> Camel路线,您应该使用@Component

有关详情,请参阅Camel spring文档:http://camel.apache.org/spring.html