【Quartz】配置最简单的集群

> 参考的优秀文章

Lesson 11: Advanced (Enterprise) Features

 

在许多情况,我们希望我们的定时任务是可靠的,不会因系统故障、机器宕机而导致某一笔定时任务不能按时运行。这种情况下,我们就需要为Quartz做个集群。

最简单的情况,有两台机器或两个应用,同时维护一批定时任务,假如其中一个机器或应用出现问题,还有另外一个应用保底使用。

 

> 最简单的集群

代码与上一节【Quartz】将定时任务持久化到数据库基本一致,只列出不同的代码。

 

在quartz.properties配置中设置需要集群,而集群节点的ID则由quartz自动生成

org.quartz.jobStore.isClustered = true
org.quartz.scheduler.instanceId = AUTO

汇总后为

org.quartz.scheduler.instanceName = MyScheduler
org.quartz.threadPool.threadCount = 3
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.dataSource = myDS
# Cluster
org.quartz.jobStore.isClustered = true
org.quartz.scheduler.instanceId = AUTO

org.quartz.dataSource.myDS.driver = com.mysql.jdbc.Driver
org.quartz.dataSource.myDS.URL = jdbc:mysql://localhost:3306/ll?characterEncoding=utf-8
org.quartz.dataSource.myDS.user = root
org.quartz.dataSource.myDS.password = 123456
org.quartz.dataSource.myDS.maxConnections = 5

:俩应用的配置应相似,除了某些特殊配置,如线程池数量、实例ID

 

这里启动两个应用,其中一个应用需要注册定时任务(这里注册的定时任务每30秒运行一次);另外一个应用因集群关系则无需注册定时任务。所以,启动类有所区别。

应用A的Bootstrap类

package No01简单的定时任务;

import java.util.concurrent.TimeUnit;

import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class Bootstrap {
    private static Logger logger = LoggerFactory.getLogger(Bootstrap.class);

    public static void main(String[] args) {

        try {
            // 获取Scheduler实例
            Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
            scheduler.start();

            // 具体任务
            JobDetail job = JobBuilder.newJob(HelloJob.class).withIdentity("job1", "group1").build();

            // 触发时间点
            CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0,30 * * * * ? *");
            Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1")
                    .withSchedule(cronScheduleBuilder).build();

            // 交由Scheduler安排触发
            scheduler.scheduleJob(job, trigger);
            
            try {
                TimeUnit.MINUTES.sleep(3);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            // 关闭Scheduler
            scheduler.shutdown();

        } catch (SchedulerException se) {
            logger.error(se.getMessage(), se);
        }
    }

}
View Code

 

应用B的Bootstrap类

package No01简单的定时任务;

import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class Bootstrap {
    private static Logger logger = LoggerFactory.getLogger(Bootstrap.class);

    public static void main(String[] args) {

        try {
            // 获取Scheduler实例
            Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
            scheduler.start();

        } catch (SchedulerException se) {
            logger.error(se.getMessage(), se);
        }
    }

}
View Code

 

现在,运行观察是否成功。先后启动应用A和应用B,运行并观察一段时间后,关闭应用A,继续观察。

应用A的日志

23:02:44.777 [main] INFO  org.quartz.impl.StdSchedulerFactory - Using default implementation for ThreadExecutor
23:02:44.799 [main] INFO  o.quartz.core.SchedulerSignalerImpl - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
23:02:44.800 [main] INFO  org.quartz.core.QuartzScheduler - Quartz Scheduler v.2.2.1 created.
23:02:44.801 [main] INFO  o.q.impl.jdbcjobstore.JobStoreTX - Using db table-based data access locking (synchronization).
23:02:44.803 [main] INFO  o.q.impl.jdbcjobstore.JobStoreTX - JobStoreTX initialized.
23:02:44.804 [main] INFO  org.quartz.core.QuartzScheduler - Scheduler meta-data: Quartz Scheduler (v2.2.1) 'MyScheduler' with instanceId 'USER-20141117SF1444316564782'
  Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
  NOT STARTED.
  Currently in standby mode.
  Number of jobs executed: 0
  Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 3 threads.
  Using job-store 'org.quartz.impl.jdbcjobstore.JobStoreTX' - which supports persistence. and is clustered.

23:02:44.804 [main] INFO  org.quartz.impl.StdSchedulerFactory - Quartz scheduler 'MyScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
23:02:44.804 [main] INFO  org.quartz.impl.StdSchedulerFactory - Quartz scheduler version: 2.2.1
23:02:45.041 [main] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'STATE_ACCESS' is desired by: main
23:02:45.054 [main] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'STATE_ACCESS' is being obtained: main
23:02:45.059 [main] DEBUG o.q.i.j.StdRowLockSemaphore - Inserting new lock row for lock: 'STATE_ACCESS' being obtained by thread: main
23:02:45.062 [main] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'STATE_ACCESS' given to: main
23:02:45.065 [main] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - Adding TriggerPersistenceDelegate of type: org.quartz.impl.jdbcjobstore.SimpleTriggerPersistenceDelegate
23:02:45.065 [main] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - Adding TriggerPersistenceDelegate of type: org.quartz.impl.jdbcjobstore.CronTriggerPersistenceDelegate
23:02:45.067 [main] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - Adding TriggerPersistenceDelegate of type: org.quartz.impl.jdbcjobstore.CalendarIntervalTriggerPersistenceDelegate
23:02:45.068 [main] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - Adding TriggerPersistenceDelegate of type: org.quartz.impl.jdbcjobstore.DailyTimeIntervalTriggerPersistenceDelegate
23:02:45.111 [main] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'STATE_ACCESS' returned by: main
23:02:45.112 [main] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:02:45.113 [main] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - JobStore background threads started (as scheduler was started).
23:02:45.113 [QuartzScheduler_MyScheduler-USER-20141117SF1444316564782_MisfireHandler] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - MisfireHandler: scanning for misfires...
23:02:45.113 [main] INFO  org.quartz.core.QuartzScheduler - Scheduler MyScheduler_$_USER-20141117SF1444316564782 started.
23:02:45.116 [QuartzScheduler_MyScheduler-USER-20141117SF1444316564782_MisfireHandler] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - Found 0 triggers that missed their scheduled fire-time.
23:02:45.117 [MyScheduler_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 0 triggers
23:02:45.122 [main] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is desired by: main
23:02:45.122 [main] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is being obtained: main
23:02:45.123 [main] DEBUG o.q.i.j.StdRowLockSemaphore - Inserting new lock row for lock: 'TRIGGER_ACCESS' being obtained by thread: main
23:02:45.125 [main] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' given to: main
23:02:45.259 [main] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' returned by: main
23:02:45.303 [MyScheduler_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 1 triggers
23:02:45.800 [Timer-0] DEBUG org.quartz.utils.UpdateChecker - Checking for available updated version of Quartz...
23:02:52.613 [QuartzScheduler_MyScheduler-USER-20141117SF1444316564782_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:03:00.005 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is desired by: MyScheduler_QuartzSchedulerThread
23:03:00.005 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is being obtained: MyScheduler_QuartzSchedulerThread
23:03:00.007 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' given to: MyScheduler_QuartzSchedulerThread
23:03:00.061 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' returned by: MyScheduler_QuartzSchedulerThread
23:03:00.066 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.simpl.PropertySettingJobFactory - Producing instance of Job 'group1.job1', class=No01简单的定时任务.HelloJob
23:03:00.073 [MyScheduler_Worker-1] DEBUG org.quartz.core.JobRunShell - Calling execute on job group1.job1
23:03:00.073 [MyScheduler_Worker-1] DEBUG No01简单的定时任务.HelloJob - No01简单的定时任务.HelloJob trigger...
23:03:00.076 [MyScheduler_Worker-1] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is desired by: MyScheduler_Worker-1
23:03:00.077 [MyScheduler_Worker-1] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is being obtained: MyScheduler_Worker-1
23:03:00.081 [MyScheduler_Worker-1] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' given to: MyScheduler_Worker-1
23:03:00.144 [MyScheduler_Worker-1] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' returned by: MyScheduler_Worker-1
23:03:00.146 [QuartzScheduler_MyScheduler-USER-20141117SF1444316564782_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:03:00.203 [MyScheduler_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 1 triggers
23:03:07.625 [QuartzScheduler_MyScheduler-USER-20141117SF1444316564782_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:03:15.126 [QuartzScheduler_MyScheduler-USER-20141117SF1444316564782_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:03:22.745 [QuartzScheduler_MyScheduler-USER-20141117SF1444316564782_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:03:30.001 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is desired by: MyScheduler_QuartzSchedulerThread
23:03:30.002 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is being obtained: MyScheduler_QuartzSchedulerThread
23:03:30.003 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' given to: MyScheduler_QuartzSchedulerThread
23:03:30.056 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' returned by: MyScheduler_QuartzSchedulerThread
23:03:30.057 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.simpl.PropertySettingJobFactory - Producing instance of Job 'group1.job1', class=No01简单的定时任务.HelloJob
23:03:30.058 [MyScheduler_Worker-2] DEBUG org.quartz.core.JobRunShell - Calling execute on job group1.job1
23:03:30.058 [MyScheduler_Worker-2] DEBUG No01简单的定时任务.HelloJob - No01简单的定时任务.HelloJob trigger...
23:03:30.060 [MyScheduler_Worker-2] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is desired by: MyScheduler_Worker-2
23:03:30.060 [MyScheduler_Worker-2] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is being obtained: MyScheduler_Worker-2
23:03:30.064 [MyScheduler_Worker-2] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' given to: MyScheduler_Worker-2
23:03:30.092 [MyScheduler_Worker-2] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' returned by: MyScheduler_Worker-2
23:03:30.151 [QuartzScheduler_MyScheduler-USER-20141117SF1444316564782_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:03:30.210 [MyScheduler_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 1 triggers
23:03:37.638 [QuartzScheduler_MyScheduler-USER-20141117SF1444316564782_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:03:45.113 [QuartzScheduler_MyScheduler-USER-20141117SF1444316564782_MisfireHandler] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - MisfireHandler: scanning for misfires...
23:03:45.117 [QuartzScheduler_MyScheduler-USER-20141117SF1444316564782_MisfireHandler] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - Found 0 triggers that missed their scheduled fire-time.
23:03:45.262 [QuartzScheduler_MyScheduler-USER-20141117SF1444316564782_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:03:52.673 [QuartzScheduler_MyScheduler-USER-20141117SF1444316564782_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:04:00.002 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is desired by: MyScheduler_QuartzSchedulerThread
23:04:00.003 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is being obtained: MyScheduler_QuartzSchedulerThread
23:04:00.005 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' given to: MyScheduler_QuartzSchedulerThread
23:04:00.061 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' returned by: MyScheduler_QuartzSchedulerThread
23:04:00.063 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.simpl.PropertySettingJobFactory - Producing instance of Job 'group1.job1', class=No01简单的定时任务.HelloJob
23:04:00.064 [MyScheduler_Worker-3] DEBUG org.quartz.core.JobRunShell - Calling execute on job group1.job1
23:04:00.064 [MyScheduler_Worker-3] DEBUG No01简单的定时任务.HelloJob - No01简单的定时任务.HelloJob trigger...
23:04:00.067 [MyScheduler_Worker-3] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is desired by: MyScheduler_Worker-3
23:04:00.067 [MyScheduler_Worker-3] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is being obtained: MyScheduler_Worker-3
23:04:00.071 [MyScheduler_Worker-3] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' given to: MyScheduler_Worker-3
23:04:00.163 [MyScheduler_Worker-3] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' returned by: MyScheduler_Worker-3
23:04:00.167 [MyScheduler_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 1 triggers
23:04:00.168 [QuartzScheduler_MyScheduler-USER-20141117SF1444316564782_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:04:07.650 [QuartzScheduler_MyScheduler-USER-20141117SF1444316564782_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:04:15.267 [QuartzScheduler_MyScheduler-USER-20141117SF1444316564782_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:04:22.669 [QuartzScheduler_MyScheduler-USER-20141117SF1444316564782_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:04:30.002 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is desired by: MyScheduler_QuartzSchedulerThread
23:04:30.003 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is being obtained: MyScheduler_QuartzSchedulerThread
23:04:30.005 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' given to: MyScheduler_QuartzSchedulerThread
23:04:30.059 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' returned by: MyScheduler_QuartzSchedulerThread
23:04:30.061 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.simpl.PropertySettingJobFactory - Producing instance of Job 'group1.job1', class=No01简单的定时任务.HelloJob
23:04:30.062 [MyScheduler_Worker-1] DEBUG org.quartz.core.JobRunShell - Calling execute on job group1.job1
23:04:30.062 [MyScheduler_Worker-1] DEBUG No01简单的定时任务.HelloJob - No01简单的定时任务.HelloJob trigger...
23:04:30.064 [MyScheduler_Worker-1] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is desired by: MyScheduler_Worker-1
23:04:30.065 [MyScheduler_Worker-1] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is being obtained: MyScheduler_Worker-1
23:04:30.067 [MyScheduler_Worker-1] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' given to: MyScheduler_Worker-1
23:04:30.126 [MyScheduler_Worker-1] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' returned by: MyScheduler_Worker-1
23:04:30.211 [QuartzScheduler_MyScheduler-USER-20141117SF1444316564782_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:04:30.253 [MyScheduler_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 1 triggers
View Code

 

应用B的日志

23:02:48.737 [main] INFO  org.quartz.impl.StdSchedulerFactory - Using default implementation for ThreadExecutor
23:02:48.763 [main] INFO  o.quartz.core.SchedulerSignalerImpl - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
23:02:48.764 [main] INFO  org.quartz.core.QuartzScheduler - Quartz Scheduler v.2.2.1 created.
23:02:48.765 [main] INFO  o.q.impl.jdbcjobstore.JobStoreTX - Using db table-based data access locking (synchronization).
23:02:48.767 [main] INFO  o.q.impl.jdbcjobstore.JobStoreTX - JobStoreTX initialized.
23:02:48.768 [main] INFO  org.quartz.core.QuartzScheduler - Scheduler meta-data: Quartz Scheduler (v2.2.1) 'MyScheduler' with instanceId 'USER-20141117SF1444316568742'
  Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
  NOT STARTED.
  Currently in standby mode.
  Number of jobs executed: 0
  Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 3 threads.
  Using job-store 'org.quartz.impl.jdbcjobstore.JobStoreTX' - which supports persistence. and is clustered.

23:02:48.768 [main] INFO  org.quartz.impl.StdSchedulerFactory - Quartz scheduler 'MyScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
23:02:48.768 [main] INFO  org.quartz.impl.StdSchedulerFactory - Quartz scheduler version: 2.2.1
23:02:48.995 [main] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'STATE_ACCESS' is desired by: main
23:02:49.008 [main] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'STATE_ACCESS' is being obtained: main
23:02:49.015 [main] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'STATE_ACCESS' given to: main
23:02:49.018 [main] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - Adding TriggerPersistenceDelegate of type: org.quartz.impl.jdbcjobstore.SimpleTriggerPersistenceDelegate
23:02:49.019 [main] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - Adding TriggerPersistenceDelegate of type: org.quartz.impl.jdbcjobstore.CronTriggerPersistenceDelegate
23:02:49.020 [main] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - Adding TriggerPersistenceDelegate of type: org.quartz.impl.jdbcjobstore.CalendarIntervalTriggerPersistenceDelegate
23:02:49.021 [main] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - Adding TriggerPersistenceDelegate of type: org.quartz.impl.jdbcjobstore.DailyTimeIntervalTriggerPersistenceDelegate
23:02:49.084 [main] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'STATE_ACCESS' returned by: main
23:02:49.087 [main] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:02:49.088 [main] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - JobStore background threads started (as scheduler was started).
23:02:49.088 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_MisfireHandler] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - MisfireHandler: scanning for misfires...
23:02:49.089 [main] INFO  org.quartz.core.QuartzScheduler - Scheduler MyScheduler_$_USER-20141117SF1444316568742 started.
23:02:49.097 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_MisfireHandler] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - Found 0 triggers that missed their scheduled fire-time.
23:02:49.100 [MyScheduler_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 0 triggers
23:02:49.764 [Timer-0] DEBUG org.quartz.utils.UpdateChecker - Checking for available updated version of Quartz...
23:02:56.568 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:03:04.064 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:03:11.573 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:03:13.468 [MyScheduler_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 0 triggers
23:03:19.075 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:03:26.625 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:03:34.086 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:03:40.882 [MyScheduler_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 0 triggers
23:03:41.584 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:03:49.088 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_MisfireHandler] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - MisfireHandler: scanning for misfires...
23:03:49.090 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_MisfireHandler] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - Found 0 triggers that missed their scheduled fire-time.
23:03:49.095 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:03:56.586 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:04:03.918 [MyScheduler_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 0 triggers
23:04:04.095 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:04:11.606 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:04:19.100 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:04:26.618 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:04:33.846 [MyScheduler_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 0 triggers
23:04:34.103 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:04:41.604 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:04:49.089 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_MisfireHandler] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - MisfireHandler: scanning for misfires...
23:04:49.092 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_MisfireHandler] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - Found 0 triggers that missed their scheduled fire-time.
23:04:49.104 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'STATE_ACCESS' is desired by: QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager
23:04:49.104 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'STATE_ACCESS' is being obtained: QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager
23:04:49.105 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'STATE_ACCESS' given to: QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager
23:04:49.107 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is desired by: QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager
23:04:49.108 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is being obtained: QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager
23:04:49.109 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' given to: QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager
23:04:49.109 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] INFO  o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: detected 1 failed or restarted instances.
23:04:49.109 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] INFO  o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Scanning for instance "USER-20141117SF1444316564782"'s failed in-progress jobs.
23:04:49.119 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] INFO  o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: ......Freed 1 acquired trigger(s).
23:04:49.120 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: ......Deleted 0 complete triggers(s).
23:04:49.120 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: ......Scheduled 0 recoverable job(s) for recovery.
23:04:49.120 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: ......Cleaned-up 0 other failed job(s).
23:04:49.187 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' returned by: QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager
23:04:49.187 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'STATE_ACCESS' returned by: QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager
23:04:49.188 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:04:49.245 [MyScheduler_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 1 triggers
23:04:56.620 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:05:00.003 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is desired by: MyScheduler_QuartzSchedulerThread
23:05:00.004 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is being obtained: MyScheduler_QuartzSchedulerThread
23:05:00.006 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' given to: MyScheduler_QuartzSchedulerThread
23:05:00.063 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' returned by: MyScheduler_QuartzSchedulerThread
23:05:00.069 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.simpl.PropertySettingJobFactory - Producing instance of Job 'group1.job1', class=No01简单的定时任务.HelloJob
23:05:00.076 [MyScheduler_Worker-1] DEBUG org.quartz.core.JobRunShell - Calling execute on job group1.job1
23:05:00.076 [MyScheduler_Worker-1] DEBUG No01简单的定时任务.HelloJob - No01简单的定时任务.HelloJob trigger...
23:05:00.080 [MyScheduler_Worker-1] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is desired by: MyScheduler_Worker-1
23:05:00.081 [MyScheduler_Worker-1] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is being obtained: MyScheduler_Worker-1
23:05:00.083 [MyScheduler_Worker-1] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' given to: MyScheduler_Worker-1
23:05:00.146 [MyScheduler_Worker-1] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' returned by: MyScheduler_Worker-1
23:05:00.215 [MyScheduler_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 1 triggers
23:05:04.106 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:05:11.617 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:05:19.117 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:05:26.651 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete.
23:05:30.001 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is desired by: MyScheduler_QuartzSchedulerThread
23:05:30.002 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is being obtained: MyScheduler_QuartzSchedulerThread
23:05:30.003 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' given to: MyScheduler_QuartzSchedulerThread
23:05:30.057 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' returned by: MyScheduler_QuartzSchedulerThread
23:05:30.058 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.simpl.PropertySettingJobFactory - Producing instance of Job 'group1.job1', class=No01简单的定时任务.HelloJob
23:05:30.058 [MyScheduler_Worker-2] DEBUG org.quartz.core.JobRunShell - Calling execute on job group1.job1
23:05:30.059 [MyScheduler_Worker-2] DEBUG No01简单的定时任务.HelloJob - No01简单的定时任务.HelloJob trigger...
23:05:30.060 [MyScheduler_Worker-2] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is desired by: MyScheduler_Worker-2
23:05:30.060 [MyScheduler_Worker-2] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is being obtained: MyScheduler_Worker-2
23:05:30.061 [MyScheduler_Worker-2] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' given to: MyScheduler_Worker-2
23:05:30.124 [MyScheduler_Worker-2] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' returned by: MyScheduler_Worker-2
23:05:30.183 [MyScheduler_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 1 triggers
View Code

通过日志观察可见,首先定时任务有应用A执行,在应用A被关闭后,定时任务由应用B继续触发执行。

:这里观察到,似乎不是负载均衡,因为在应用A关闭后应用B才有机会运行。而我们理想中,应该是应用A与应用B互相补充、交替运行。这里主要因为只用了一个任务(只有一个触发器)做测试,如果运用多个触发器设置多个任务做测试,应用A与应用B互相补充、交替运行。原文为:

The load balancing mechanism is near-random for busy schedulers (lots of triggers) but favors the same node that just was just active for non-busy (e.g. one or two triggers) schedulers.

 

posted @ 2015-10-09 00:04  nick_huang  阅读(18215)  评论(0编辑  收藏  举报