骆驼只在错误的时间开始用石英安排的第一条路线
Camel only starts first route scheduled with quartz, at the wrong time
我有一个 Spring 引导应用程序,其中包含多个应基于 quartz2 的 CronTrigger 启动的骆驼路线。出于某种原因,只有最先安排的路线会开始,但它会在最后一条路线安排的时间开始。
- 路线一:mytime - 1h
- 路线二:mytime
只有路线一开始,在我的时间。
我做了一个最小的例子。因为我的路由应该检查数据库 table 的内容并导出其中的一部分,在我的示例中,路由将检查 table 并记录在属性中设置的列中找到的最新日期.
路线建设者:
/**
* 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}
日志:
Configured export route: MonthProcessingRoute - schedule:
quartz2://CronTrigger?cron=0 39 * * * ?
Configured export route: WeekProcessingRoute - schedule: quartz2://CronTrigger?cron=0 41 * * * ?
2018-03-20 05:37:33 INFO tryouts-spring-camel ivana.StartUp - -
- Started StartUp in 2.507 seconds (JVM running for 3.238)
2018-03-20 05:41:00 INFO tryouts-spring-camel ivana.routebuilders.ScheduledRoutesRouteBuilder - - - Kickstarting
export route: MonthProcessingRoute - schedule:
quartz2://CronTrigger?cron=0 39 * * * ?
Most recent date found in database table month: 2017-11-05 15:31:00.0
您应该确保为每条 Camel 路线使用唯一的 triggerName/groupName。您似乎在两条路线中使用了相同的名称 CronTrigger
。将其更改为唯一名称,它应该可以工作。
我有一个 Spring 引导应用程序,其中包含多个应基于 quartz2 的 CronTrigger 启动的骆驼路线。出于某种原因,只有最先安排的路线会开始,但它会在最后一条路线安排的时间开始。
- 路线一:mytime - 1h
- 路线二:mytime
只有路线一开始,在我的时间。
我做了一个最小的例子。因为我的路由应该检查数据库 table 的内容并导出其中的一部分,在我的示例中,路由将检查 table 并记录在属性中设置的列中找到的最新日期.
路线建设者:
/**
* 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}
日志:
Configured export route: MonthProcessingRoute - schedule: quartz2://CronTrigger?cron=0 39 * * * ?
Configured export route: WeekProcessingRoute - schedule: quartz2://CronTrigger?cron=0 41 * * * ?
2018-03-20 05:37:33 INFO tryouts-spring-camel ivana.StartUp - - - Started StartUp in 2.507 seconds (JVM running for 3.238)
2018-03-20 05:41:00 INFO tryouts-spring-camel ivana.routebuilders.ScheduledRoutesRouteBuilder - - - Kickstarting export route: MonthProcessingRoute - schedule: quartz2://CronTrigger?cron=0 39 * * * ?
Most recent date found in database table month: 2017-11-05 15:31:00.0
您应该确保为每条 Camel 路线使用唯一的 triggerName/groupName。您似乎在两条路线中使用了相同的名称 CronTrigger
。将其更改为唯一名称,它应该可以工作。