Spring XML配置Camel文件夹自动轮询:如何维持应用持续运行?
解决Spring XML配置Apache Camel路由后应用无法持续运行的问题
我明白你的问题——之前用Java代码写RouteBuilder时,Camel能自动维持应用运行并轮询文件夹,但换成Spring XML配置路由后,主程序启动Spring上下文就直接退出了,没法持续执行轮询任务。这是因为你没让主线程保持活跃,JVM在main方法执行完就终止了。下面给你两个简单有效的解决方案:
方案一:使用Camel的Main类加载Spring配置
Camel的Main类专门用来管理Camel应用的生命周期,它会自动阻塞主线程,让应用持续运行。修改你的主类代码如下:
import org.apache.camel.main.Main; public class FileTransferinSpring { public static void main(String args[]) throws Exception { Main main = new Main(); // 指定Spring XML配置文件的路径 main.setApplicationContextUri("classpath:MySpring.xml"); // 启动Camel应用并阻塞主线程 main.run(); } }
这样Main类会负责初始化Spring上下文、启动CamelContext,并且一直保持应用运行,直到你按Ctrl+C终止程序。
方案二:手动阻塞主线程
如果你不想用Camel的Main类,也可以在Spring上下文启动后,通过阻塞主线程来防止JVM退出:
import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.context.ApplicationContext; public class FileTransferinSpring { public static void main(String args[]) throws InterruptedException { ApplicationContext ctx = new ClassPathXmlApplicationContext("MySpring.xml"); System.out.println("Camel路由已启动,正在轮询文件夹。按Ctrl+C停止程序。"); // 阻塞当前主线程,永久等待(直到外部中断) Thread.currentThread().join(); } }
为什么原来的代码不行?
你之前的代码里,Spring上下文虽然初始化了,但main方法执行完所有语句后就结束了,JVM没有理由继续运行,所以直接退出了。而Camel的路由是在后台线程中运行的,主线程退出会导致整个JVM终止,自然没法持续轮询文件夹。
另外,你的Spring XML配置是没问题的——<camelContext>里定义的路由会在Spring上下文启动时自动初始化并启动,只要主线程保持活跃,路由就能正常执行轮询逻辑。
内容的提问来源于stack exchange,提问作者Elias Khattar
相关产品推荐
相关产品推荐

