zoukankan      html  css  js  c++  java
  • 【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.

  • 相关阅读:
    CF 436D 最小生成树
    HDU 1847 博弈
    ZOJ 3666 博弈 SG函数
    zoj3675 BFS+状态压缩
    HDU 4734 F(x) 数位DP
    HDU 3709 Balanced Number 数位DP
    HDU 3555 数位DP
    HDU 4336 Card Collector
    HDU4340 Capturing a country DP
    CF 351A
  • 原文地址:https://www.cnblogs.com/nick-huang/p/4862732.html
Copyright © 2011-2022 走看看