Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot Camel只在错误的时间启动quartz安排的第一条路线_Spring Boot_Apache Camel_Quartz Scheduler - Fatal编程技术网

Spring boot Camel只在错误的时间启动quartz安排的第一条路线

Spring boot Camel只在错误的时间启动quartz安排的第一条路线,spring-boot,apache-camel,quartz-scheduler,Spring Boot,Apache Camel,Quartz Scheduler,我有一个Spring引导应用程序,它有几个camel路由,应该基于quartz2的CronTrigger启动。由于某些原因,只有计划在第一个路由上的路由才会启动,但它会在为最后一个路由计划的时间启动 路线一:mytime-1h 路线二:我的时间 在我的时间里,只有路线1启动 我举了一个简单的例子。因为我的路由应该检查数据库表的内容并导出其中的一部分,所以在我的示例中,路由将检查该表并记录在属性集中的列中找到的最新日期 Routebuilder: /** * Starts a list of ro

我有一个Spring引导应用程序,它有几个camel路由,应该基于quartz2的CronTrigger启动。由于某些原因,只有计划在第一个路由上的路由才会启动,但它会在为最后一个路由计划的时间启动

路线一:mytime-1h 路线二:我的时间 在我的时间里,只有路线1启动

我举了一个简单的例子。因为我的路由应该检查数据库表的内容并导出其中的一部分,所以在我的示例中,路由将检查该表并记录在属性集中的列中找到的最新日期

Routebuilder:

/**
* 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());
  }
}
application.yml:

# 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}
日志:

配置的导出路由:MonthProcessingRoute-计划: quartz2://CronTrigger?cron=0 39***

配置的导出路由:WeekProcessingRoute-计划:quartz2://CronTrigger?cron=0 41***

2018-03-20 05:37:33信息试用春季骆驼伊凡娜创业-- -启动时间为2.507秒JVM运行时间为3.238

2018-03-20 05:41:00信息试用春季骆驼ivana.routebuilders.ScheduleDurotesRouteBuilder----Kickstarting 导出路线:月处理路线-计划: quartz2://CronTrigger?cron=0 39***

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


您应该确保为每个骆驼路线使用唯一的triggerName/groupName。看起来您在两个路由中使用了相同的名称CronTrigger。将其更改为唯一的名称,应该可以使用。

您确定在骆驼路线中使用的是唯一的组和timerName吗,例如,它们不应同时被称为CronTrigger。是的@克劳斯·易卜生,谢谢你。你想把它变成我该做什么的答案吗?