当前位置: 首页 > 知识库问答 >
问题:

骆驼只在错误的时间开始与石英预定的第一条路线

冷正信
2023-03-14

我有一个Spring boot应用程序,其中包含几条camel路由,这些路由应该基于Quartz2的CronTrigger启动。由于某种原因,只有第一个计划的路由才会启动,但它是在最后一个计划的时间启动的。

  1. 路由一:mytime-1h
  2. 路由二:mytime
/**
* Starts a list of routes that have been scheduled in application.yml
*/
@Component
public class ScheduledRoutesRouteBuilder extends SpringRouteBuilder {

  private static final Logger LOG = LoggerFactory.getLogger(ScheduledRoutesRouteBuilder.class);
  private static final String BEAN_CHECKDB = "bean:checkDBBean?method=getFirstRecord(%s, %s)";

  @Autowired
  private RoutesDefinition routesDefinition;

  @Override
  public void configure() throws Exception {
    routesDefinition.getScheduledRoutes().stream()
    .forEach(route -> createScheduledRoute(route));
}

  private void createScheduledRoute(RouteDefinition aRoute) {
    from(aRoute.getSchedule())
    .routeId(aRoute.getRouteId())
    .log(LoggingLevel.INFO, LOG, "Kickstarting export route: " + aRoute.getRouteId() + " - schedule: " + aRoute.getSchedule())
    .to(String.format(BEAN_CHECKDB, aRoute.getDbTableName(), aRoute.getReferenceDateColumnName()));
    System.out.println("Configured export route: " + aRoute.getRouteId() + " - schedule: " + aRoute.getSchedule());
  }
}
# Schedules
scheduleFirst: 0 39 * * * ?
scheduleSecond: 0 41 * * * ?

scheduledRoutes:
  - routeId: MonthProcessingRoute
      dbTableName: month
      referenceDateColumnName: acceptatiedatum
      schedule: quartz2://CronTrigger?cron=${scheduleFirst}
  - routeId: WeekProcessingRoute
      dbTableName: week
      referenceDateColumnName: acceptatiedatum
      schedule: quartz2://CronTrigger?cron=${scheduleSecond}

已配置导出路由:WeekProcessingRoute-Schedule:Quartz2:/cronTrigger?cron=041***?

2018-03-20 05:37:33信息选拔赛-Spring-Camel Ivana.StartUp---在2.507秒内启动(JVM运行时间为3.238)

2018-03-20 05:41:00信息选拔赛-Spring-Camel Ivana.routebuilders.scheduledRouteBuilder---启动导出路由:MonthProcessingRoute-schedule:quartz2://crontrigger?cron=039***?

在数据库表中找到的最近日期月份:2017-11-05 15:31:00.0

共有1个答案

莘昊
2023-03-14

您应该确保为每个Camel路由使用唯一的triggername/groupname。在这两条路由中,您似乎使用了相同的名称crontrigger。将其改为唯一的名称,它应该可以工作。

 类似资料:
  • 问题内容: 我尝试对Apache骆驼路线进行junit测试。像这样的东西: 构建器类的定义如下 “ myExportRouteProcessor”类仅从JPA存储库中获取一些数据,并将结果放入路由。我想要的是在测试类中触发此路由,以检查整个过程是否正确完成。当前,处理器未启动。我该怎么办? 问题答案: 您可以使用AdviceWithRouteBuilder#replaceFromWith直接替换测

  • 我试着为阿帕奇骆驼路线做一个jUnit测试。类似于这样: builder类的定义如下 myExportRouteProcencer类只是从JPA存储库中获取一些数据,并将结果放入路由。我想要的是在测试类中触发此路由,以检查整个过程是否正确完成。目前,处理器没有被触发。我应该做些什么?

  • 我设置了一个endpoint,如下所示: 我用骆驼石英2.22.2和石英1.8.6 下面是从关闭到启动上下文的日志。

  • 我想用Apache Camel和Quartz2按spceific顺序设计路线。我定义了一个上下文,添加了两条路由: 代码构建和运行,但我没有来自控制台的反馈,我期待订单1的路由结果。此外,顺序为2的路由不会写入作为参数传递的文件。每条路线,采取单独正确运行。有人能帮帮我吗?

  • 我试着在互联网上找遍了,但没有找到任何关于骆驼石英在运行时更改其时间的适当文档。有没有人知道如何在骆驼路线上开始和停止。

  • 我正在研究一个骆驼原型,它在同一骆驼环境中使用两个起点。 第一个路由使用用于“配置”应用程序的消息。消息通过配置服务bean加载到配置存储库中: 第二个路由实现了收件人列表eip模式,将不同类型的输入消息传递给许多收件人,这些收件人从同一个配置存储库中按顺序读取: 现在出现的问题是如何同步它们,因此如果第一个路由正在处理新数据,则第二个路由“等待”。 我是Apache Camel的新手,对如何处理