【问题标题】:Quartz load jobs from db filtering by group criteriaQuartz 从按组标准过滤的数据库中加载作业
【发布时间】:2019-03-20 11:51:54
【问题描述】:

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

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

问题是:

1

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

2

如何在石英调度器中仅注册对当前服务有效的 JobClass? (作为示例服务可以仅支持 googleRetry 作业,但 DB 包含 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配置石英恢复模式,如何?

【问题讨论】:

    标签: java spring quartz-scheduler restore quartz


    【解决方案1】:

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

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

    调度程序实例名称在SCHED_NAME 列中的不同表中使用。这是在加载时从实例的 db 过滤作业\触发器的重要条件。

    【讨论】:

      猜你喜欢
      • 2013-04-16
      • 1970-01-01
      • 1970-01-01
      • 2015-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-07
      相关资源
      最近更新 更多