【发布时间】:2009-06-29 14:33:41
【问题描述】:
quartz 中的方法 Scheduler.getCurrentlyExecutingJobs() 显然不支持集群。人们使用什么方法来获取所有正在执行的作业的列表?
【问题讨论】:
标签: jakarta-ee quartz-scheduler
quartz 中的方法 Scheduler.getCurrentlyExecutingJobs() 显然不支持集群。人们使用什么方法来获取所有正在执行的作业的列表?
【问题讨论】:
标签: jakarta-ee quartz-scheduler
似乎不会很快对调度机制进行彻底改革。
所以,这就是我直接检查表格的方式 - 如果需要,请添加组支持:
class QuartzClusterJobStatusService
{
def quartzScheduler
boolean isJobRunning(String job) {
return isJobRunningHere(job) || isJobRunningElsewhere(job)
}
boolean isJobRunningHere(String job) {
for (JobExecutionContext j : quartzScheduler.getCurrentlyExecutingJobs()) {
if (new JobKey(job,"GRAILS_JOBS").equals(j.jobDetail.key)) {
return true
}
}
return false
}
boolean isJobRunningElsewhere(String job) {
JobStoreSupport js = quartzScheduler.sched.resources.jobStore
if (!js.isClustered()) {
return false
}
Connection conn = DBConnectionManager.getInstance().getConnection(js.getDataSource());
PreparedStatement stmt = null
try {
stmt = conn.prepareStatement("SELECT 1 FROM " + js.getTablePrefix() + "FIRED_TRIGGERS where JOB_NAME = ?")
stmt.setString(1, job)
ResultSet rs = stmt.executeQuery()
return rs.next()
} finally {
if (stmt != null)
stmt.close()
}
}
}
【讨论】:
我会假设一种方法是直接访问数据库,虽然它有点冒险,因为 API 完全处理。
为此,他们的 Jira 中存在问题。他们的结论是,如果他们想要满足集群感知,您需要彻底改革调度机制。
【讨论】: