Получить список всех выполняемых в данный момент заданий в кластере с помощью Quartz - PullRequest
6 голосов
/ 29 июня 2009

Метод Scheduler.getCurrentlyExecutingJobs () в кварце, очевидно, не поддерживает кластер. Какой метод используют люди, чтобы получить список всех выполняемых заданий?

Ответы [ 2 ]

4 голосов
/ 21 июня 2013

Похоже, в ближайшее время капитальный ремонт механизма планирования не произойдет.

Итак, вот как я проверяю таблицу напрямую - добавьте поддержку группы, если хотите:

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()
        }
    }
}
0 голосов
/ 09 октября 2009

Я бы предположил, что одним из способов является прямой доступ к базе данных, хотя это немного рискованно, поскольку API полностью это обрабатывает.

Для этой цели в их джирах есть проблема. Их вывод заключается в том, что вам нужно пересмотреть механизм планирования, если они хотят обслуживать кластер.

Вы можете обратиться к http://jira.opensymphony.com/browse/QUARTZ-372

...