我正在开发一个使用camel,spring DSL并通过maven打包为jar的应用程序。在我的本地机器上,我可以使用maven camel:run。
启动应用程序但我不确定这是否应该在test / prod环境中使用。 至于这样的环境,我也应该支持启动/停止应用程序。
我在其他地方读到有不同的部署/运行选项 - http://java.dzone.com/articles/apache-camel-deployment-modes
有人可以建议启动使用spring应用程序上下文的camel应用程序(jar)的最佳方法是什么?如果它类似于有一个加载spring上下文的主类,我可以添加什么支持以允许在应用程序上调用shutdown?
答案 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>