You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:14:27