我想運行一次路線並在路線完成時停止上下文。目前,我在主Java類中執行通常的Thread.sleep(3000),爲路由留下了一些時間,但顯然不準確,我的路由可能需要1秒鐘或20秒,我不能提前知道。駱駝和春天:路線完成時停止上下文
的Java類:
public static void main(String[] args) throws Exception {
try (ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("camel-context.xml")) {
CamelContext camelContext = SpringCamelContext.springCamelContext(context);
// context.start(); // apparently not necessary
camelContext.startRoute("route1");
try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); }
// context.stop(); // apparently not necessary
}
}
Spring的XML:
<route id="route1" autoStartup="false">
<from uri="timer://runOnce?repeatCount=1&delay=3000" />
...
</route>
閱讀http://camel.465427.n5.nabble.com/Need-control-back-in-the-Main-routine-so-that-we-can-terminate-JVM-td4483312.html#a4484845尤其是第4後,克勞斯易卜生後,我想在使用camelContext.getRouteStatus()的使用Thread.sleep()循環,但無論我嘗試在代碼中獲取路由狀態(即使在Thread.sleep(3000)之後),狀態總是「開始」。我不知道任何其他方式來檢測路線何時完成。
使用Spring完成/全部路由完成時停止駱駝上下文的推薦方法是什麼?
其實我已經在路線的終點的處理器,所以我會去你的第二個選項,但我仍然需要在try {了Thread.sleep(3000); }在Main類中有一個很大的數字吧?因爲正如你在我的代碼中看到的那樣,即使沒有context.stop(),上下文也會立即停止。 –