【问题标题】:Get a list of all currently executing jobs in a cluster with Quartz使用 Quartz 获取集群中所有当前正在执行的作业的列表
【发布时间】:2009-06-29 14:33:41
【问题描述】:

quartz 中的方法 Scheduler.getCurrentlyExecutingJobs() 显然不支持集群。人们使用什么方法来获取所有正在执行的作业的列表?

【问题讨论】:

    标签: jakarta-ee quartz-scheduler


    【解决方案1】:

    似乎不会很快对调度机制进行彻底改革。

    所以,这就是我直接检查表格的方式 - 如果需要,请添加组支持:

    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()
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      我会假设一种方法是直接访问数据库,虽然它有点冒险,因为 API 完全处理。

      为此,他们的 Jira 中存在问题。他们的结论是,如果他们想要满足集群感知,您需要彻底改革调度机制。

      可以参考http://jira.opensymphony.com/browse/QUARTZ-372

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-18
        • 1970-01-01
        • 1970-01-01
        • 2019-07-05
        • 2014-10-08
        • 2016-11-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多