Java 如何确保只有在前一条路由结束后才触发路由?

Java 如何确保只有在前一条路由结束后才触发路由?,java,spring,apache-camel,Java,Spring,Apache Camel,from(“直接:+ccurresponents.ROUTE\u SYNC\u人员) .routeId(CCURecorants.ROUTE_SYNC_personals).noAutoStartup().log()).setProperty(“currentTime”).method().bean().bean().bean().bean().bean().bean().bean().log()//正在测试中。autoStartup(true).end()} 我有一种情况,我希望我以前的Apa

from(“直接:+ccurresponents.ROUTE\u SYNC\u人员)
.routeId(CCURecorants.ROUTE_SYNC_personals).noAutoStartup().log()).setProperty(“currentTime”).method().bean().bean().bean().bean().bean().bean().bean().log()//正在测试中。autoStartup(true).end()}
我有一种情况,我希望我以前的Apache camel路线完成,然后它只会再次触发相同的路线

下面是我尝试过但失败的地方

我尝试在路由开始时将AutoStart设置为false,并在路由结束前将其设置为true。

是不是“我希望以前的Apache camel交换或消息完成?”

再次启动相同的路由-如果使用者端点使用轮询,则路由将通过拾取新消息和流程从头开始重新启动

然而,根据我的理解,我的回答如下: 关于路由或上下文开始,请参阅

您还可以在运行时启动和停止路由

public class RunTimeRouteControl {

    private final String routeId;

    public RunTimeRouteControl(String routeId) {
        this.routeId = routeId;
    }

    public void stopRoutes(Exchange exchange) throws Exception {
        exchange.getContext().getInflightRepository().remove(exchange, routeId);
        exchange.getContext().stopRoute(routeId);
    }

    public void startRoutes(Exchange exchange) throws Exception {
        exchange.getContext().getInflightRepository().remove(exchange, routeId);
        exchange.getContext().startRoute(routeId);
    }
}
Bean配置

<bean id="runTimeRouteControl" class="RunTimeRouteControl" >
    <constructor-arg name="routeId" value="routeName"  />
</bean>

在上下文中

<to uri="bean:runTimeRouteControl?method=stopRoutes" />

我在我的一个应用程序中遇到了相同的情况。我是通过使用
startupOrder
实现的。使用此选项可以定义路线开始的顺序


-杰伊

我们看不到你尝试了什么。您应该更新您的问题。noAutoStartup().log()).setProperty(“currentTime”).method().bean().bean().setProperty().body().bean().bean().bean().setProperty().noAutoStartup().process(新处理器(){}.bean().setProperty().body().bean().log()//正在测试中。autoStartup(true).endHi Jay,Startup order定义了仅为不同路由启动路由的顺序,但在我的情况下,我的路由与计划在时间间隔后运行的路由相同(CRON作业)有时我会遇到一种情况,即同一条路线仍在运行,但尚未完成任务,它再次被触发,我需要进行同步(如果同一条路线已在运行,则不应启动)。Manjeet,你有问题了。请参考本网站
http://camel.apache.org/oncompletion.html
Hi Jay,如果你能举例说明如何通过Oncompletion实现这一点,我将在spring DSL中解释如何实现。您可以使用
标记保留将首先运行并需要时间完成的代码部分。这将阻止重新开始路线运行。