支持启动,停止我的apache camel应用程序(使用spring)jar

时间:2013-11-26 16:10:49

标签: spring apache-camel

我正在开发一个使用camel,spring DSL并通过maven打包为jar的应用程序。在我的本地机器上,我可以使用maven camel:run。

启动应用程序

但我不确定这是否应该在test / prod环境中使用。 至于这样的环境,我也应该支持启动/停止应用程序。

我在其他地方读到有不同的部署/运行选项 - http://java.dzone.com/articles/apache-camel-deployment-modes

有人可以建议启动使用spring应用程序上下文的camel应用程序(jar)的最佳方法是什么?如果它类似于有一个加载spring上下文的主类,我可以添加什么支持以允许在应用程序上调用shutdown?

2 个答案:

答案 0 :(得分:0)

有很多方法可以让您的路线动态启动和停止。在camel-spring中有一个名为Main的类,用于管理XML路由(http://camel.apache.org/running-camel-standalone-and-have-it-keep-running.html)。您可以实现一个服务,该服务监视新XML文件的目录,并在每次删除文件时启动该路由。为此,您可以使用Java 7中提供的新WatchService,也可以使用Apache Commons VFS2。

您还可以使用Apache Karaf来使用OSGi方法,它提供了开箱即用(http://camel.apache.org/karaf.html)路由的功能。但是,如果您不了解OSGi,这种方法的学习曲线可能更大。

答案 1 :(得分:0)

您可以使用maven-shade-plugin构建可执行jar。主要类是hveiga提到的那个。根据操作系统的不同,有几种方法可以将Java进程作为服务/守护进程运行。在linux上我们通过init.d脚本nohup java进程,在Windows上我们使用java service wrapper

着色器插件的一个缺点是您需要管理如何解析各个jar中资源的名称冲突。这是适合我们的配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>1.5</version>
    <configuration>
        <transformers>
            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                <mainClass>org.apache.camel.spring.Main</mainClass>
            </transformer>
            <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                <resource>META-INF/spring.handlers</resource>
            </transformer>
            <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                <resource>META-INF/spring.schemas</resource>
            </transformer>
            <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                <resource>META-INF/spring.tooling</resource>
            </transformer>
            <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                <resource>META-INF/cxf/bus-extensions.txt</resource>
            </transformer>
            <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
            <transformer implementation="org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer">
                <resource>META-INF/INDEX.LIST</resource>
            </transformer>
            <transformer implementation="org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer">
                <resource>META-INF/MSFTSIG.SF</resource>
            </transformer>
            <transformer implementation="org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer">
                <resource>META-INF/MSFTSIG.RSA</resource>
            </transformer>
        </transformers>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
        </execution>
    </executions>
</plugin>