Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jakarta ee 使用Quartz获取集群中当前正在执行的所有作业的列表_Jakarta Ee_Quartz Scheduler - Fatal编程技术网

Jakarta ee 使用Quartz获取集群中当前正在执行的所有作业的列表

Jakarta ee 使用Quartz获取集群中当前正在执行的所有作业的列表,jakarta-ee,quartz-scheduler,Jakarta Ee,Quartz Scheduler,quartz中的方法Scheduler.getCurrentlyExecutingJobs()显然不支持群集。人们使用什么方法来获取所有正在执行的作业的列表?我认为一种方法是直接访问数据库,尽管这有点危险,因为API完全可以处理这个问题 为此,他们的Jira中存在一个问题。他们的结论是,如果他们想满足集群感知的需求,您需要彻底检查调度机制 您可以参考看来,计划机制的大修不会很快发生 下面是我直接检查表的方法-如果需要,请添加组支持: class QuartzClusterJobStatusSer

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

我认为一种方法是直接访问数据库,尽管这有点危险,因为API完全可以处理这个问题

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


您可以参考

看来,计划机制的大修不会很快发生

下面是我直接检查表的方法-如果需要,请添加组支持:

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