在我的spring boot应用程序中,使用了quartz
启动器。产生的所有作业都在运行时添加到DB中。数据库使用了不同的服务,但是只能使用填充了作业的服务来处理作业。
启动任何服务时,我需要保证仅将由该服务产生的作业添加到石英作业上下文中。我们可以按指定的组检测这些作业。
如何用最少的更改来管理作业加载程序(使用开箱即用的解决方案)仅按指定的组过滤作业(在此作业上下文中不应处理不同的组)?
如何仅在石英调度程序中注册对当前服务有效的JobClass? (例如,示例服务可能仅支持googleRetry作业,但数据库包含fbRetry和linkedInRetry。该实例应仅加载googleRetry作业。)我希望它可以从另一侧管理作业加载。
我在石英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
配置石英恢复模式?
答案 0 :(得分:1)
似乎注意力集中在不同的事物上。 Quartz Scheduler绝对应该知道自己的工作。另外的想法是为不同的服务(例如,不同的服务)管理石英调度程序(仅对于同一集群类似)。解决方案是指定调度程序名称:
spring:
quartz:
job-store-type: jdbc
properties:
org:
quartz:
thread-pool:
thread-count: 5
scheduler:
instanceName: mailCluster
计划程序实例名称在SCHED_NAME
列的不同表中使用。这是在实例加载时从db筛选作业\触发器的重要条件。