Quartz 从数据库按组标准过滤加载作业

Quartz load jobs from db filtering by group criteria

在我的 spring 引导应用程序中使用 quartz 启动器。产生的所有作业都在运行时添加到数据库中。数据库使用不同的服务,但作业只能处理用作业填充数据库的服务。

启动我需要的任何服务保证只有这个服务产生的作业才会被添加到石英作业上下文中。我们可以按指定的组来检测这些作业。

问题是:

1

如何以最少的更改管理作业加载器(使用开箱即用的解决方案)仅按指定组过滤作业(不应在此作业上下文中处理不同的组)?

2

如何在quartz调度器中只注册对当前服务有效的JobClasses? (例如服务可能仅支持 googleRetry 作业,但数据库包含 fbRetry 和 linkedInRetry。该实例应仅加载 googleRetry 作业。)我希望它可以从不同方面管理作业加载。

3

我在石英中检测到 DriverDelegate 下一个方法

/**
 * <p>
 * Get the names of all of the triggers in the given group and state that
 * have misfired - according to the given timestamp.
 * </p>
 * 
 * @param conn
 *          the DB Connection
 * @return an array of <code>{@link
 * org.quartz.utils.Key}</code> objects
 */
List<TriggerKey> selectMisfiredTriggersInGroupInState(Connection conn,
    String groupName, String state, long ts) throws SQLException;

但没有使用它。我希望它应该在特殊恢复模式下使用(以恢复按组过滤为例)但没有用法。我尝试使用我需要的功能来管理 CustomDelegate 升级 selectTriggersForRecoveringJobs,但在这种情况下得到 CURSOR issue

是否可以使用 selectMisfiredTriggersInGroupInState 配置石英恢复模式,如何?

似乎注意力集中在不同的事情上。 Quartz 调度器绝对应该知道它自己的工作。其他想法为不同的服务管理石英调度程序,例如不同的服务(仅对同一集群类似)。解决方案是指定调度程序名称:

spring:
  quartz:
    job-store-type: jdbc
    properties:
      org:
        quartz:
          thread-pool:
            thread-count: 5
          scheduler:
            instanceName: mailCluster

调度程序实例名称在 SCHED_NAME 列的不同表中使用。这是在实例的数据库加载时过滤 jobs\triggers 的重要条件。