現在最新版本的quartz是2.16,這里簡單介紹下這個版本下的集群。嘗試過與spring的整合,但好像spring對這個版本還沒辦法整合,總有錯。
先下載http://quartz-scheduler.org/downloads/catalog 然后運行quartz-2.1.6\docs\dbTables\tables_mysql_innodb.sql
LOGGER.debug("#######################init quartz ....###################");
Properties properties = new Properties();
properties.put("org.quartz.scheduler.instanceName","MyClusteredScheduler");
properties.put("org.quartz.scheduler.instanceId","AUTO");
properties.put("org.quartz.scheduler.skipUpdateCheck","true");
properties.put("org.quartz.threadPool.class","org.quartz.simpl.SimpleThreadPool");
properties.put("org.quartz.threadPool.threadCount","12");
properties.put("org.quartz.threadPool.threadPriority","5");
properties.put("org.quartz.jobStore.misfireThreshold","10000");
properties.put("org.quartz.jobStore.class","org.quartz.impl.jdbcjobstore.JobStoreTX");
properties.put("org.quartz.jobStore.driverDelegateClass","org.quartz.impl.jdbcjobstore.StdJDBCDelegate");
properties.put("org.quartz.jobStore.useProperties","true");
properties.put("org.quartz.jobStore.dataSource","myDS");
properties.put("org.quartz.jobStore.tablePrefix","QRTZ_");
properties.put("org.quartz.jobStore.isClustered","true");
properties.put("org.quartz.dataSource.myDS.driver",DBDRIVER);
properties.put("org.quartz.dataSource.myDS.URL",DBURL);
properties.put("org.quartz.dataSource.myDS.user",DBUSER);
properties.put("org.quartz.dataSource.myDS.password",DBPWD);
properties.put("org.quartz.dataSource.myDS.maxConnections","5");
// we must get a reference to a scheduler
SchedulerFactory sf = new StdSchedulerFactory(properties);
sched = sf.getScheduler();
LOGGER.info("------- Initializing ----------------------");
LOGGER.info("------- Initialization Complete -----------");
LOGGER.info("------- Scheduling Job -------------------");
// define the jobs and tie them to our HelloJob class
JobDetail job1_1 = newJob(HelloJob.class).withIdentity("job1", "group1").build();
JobDetail job2_1 = newJob(HelloJob.class).withIdentity("job2", "group1").build();
JobDetail job1_2 = newJob(HelloJob.class).withIdentity("job1", "group2").build();
JobDetail job2_2 = newJob(HelloJob.class).withIdentity("job2", "group2").build();
trigger1_1 = newTrigger()
.withIdentity("job1", "group1")
.startNow()
.withSchedule(
SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(INTERVAL_IN_SECONDS)
.repeatForever())
.build();
trigger2_1 = newTrigger()
.withIdentity("job2", "group1")
.startNow()
.withSchedule(
SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(INTERVAL_IN_SECONDS)
.repeatForever())
.build();
trigger1_2 = newTrigger()
.withIdentity("job1", "group2")
.startNow()
.withSchedule(
SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(INTERVAL_IN_SECONDS)
.repeatForever())
.build();
trigger2_2 = newTrigger()
.withIdentity("job2", "group2")
.startNow()
.withSchedule(
SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(INTERVAL_IN_SECONDS)
.repeatForever())
.build();
Trigger[] triggers = new Trigger[] { trigger1_1, trigger1_2, trigger2_1, trigger2_2 };
JobDetail[] jobDetails = new JobDetail[] { job1_1, job1_2, job2_1, job2_2 };
for (int i = 0; i < triggers.length; i++) {
JobDetail job = jobDetails[i];
Trigger trigger = triggers[i];
if (sched.checkExists(job.getKey())) {
// the job already exists in jdbcjobstore; let's reschedule it
sched.rescheduleJob(trigger.getKey(), trigger);
LOGGER.info(trigger.getKey() + "@@@@@@@@@@@@@@@@@RESCHEDULEJOB");
} else {
LOGGER.info(trigger.getKey() + "#####################SCHEDULEJOB");
sched.scheduleJob(job, trigger);
}
}
// Start up the scheduler (nothing can actually run until the
// scheduler has been started)
sched.start();
LOGGER.info("------- Scheduler Started -----------------");
// wait long enough so that the scheduler as an opportunity to
// run the job!
try {
Thread.sleep(DURATION_OF_FIRST_SCHEDULING * 1000L);
} catch (Exception e) {
}
}
先通過 properties構造 SchedulerFactory ,把job持久到數據庫
SchedulerFactory sf = new StdSchedulerFactory(properties);
然后添加job,trigger到 SchedulerFactory
Properties 相關參數介紹如下:
#============================================================================ # Configure Main Scheduler Properties #============================================================================ #instanceName屬性可為任何值,用在 JDBC JobStore 中來唯一標識實例,但是所有集群節點中必須相同 org.quartz.scheduler.instanceName=MyClusteredScheduler #屬性為 AUTO即可,基於主機名和時間戳來產生實例 ID org.quartz.scheduler.instanceId=AUTO #============================================================================ # Configure ThreadPool #============================================================================ org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool org.quartz.threadPool.threadCount=25 org.quartz.threadPool.threadPriority=5 #============================================================================ # Configure JobStore #============================================================================ org.quartz.jobStore.misfireThreshold=60000 #屬性為 JobStoreTX將任務持久化到數據中。因為集群中節點依賴於數據庫來傳播 org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate org.quartz.jobStore.useProperties=true org.quartz.jobStore.dataSource=myDS org.quartz.jobStore.tablePrefix=QRTZ_ #屬性為 true,你就告訴了 Scheduler 實例要它參與到一個集群當中。這一屬性會貫穿於調度框架的始終,用於修改集群環境中操作的默認行為 org.quartz.jobStore.isClustered=true #屬性定義了Scheduler 實例檢入到數據庫中的頻率(單位:毫秒) org.quartz.jobStore.clusterCheckinInterval=20000 #============================================================================ # Configure Datasources #============================================================================ org.quartz.dataSource.myDS.driver=com.mysql.jdbc.Driver org.quartz.dataSource.myDS.URL=jdbc:mysql://localhost:3306/jtxw?useUnicode=true&characterEncoding=utf8 org.quartz.dataSource.myDS.user=root org.quartz.dataSource.myDS.password=root org.quartz.dataSource.myDS.maxConnections=5 org.quartz.dataSource.myDS.validationQuery=select 1
官方配置參考地址:http://quartz-scheduler.org/documentation/quartz-2.1.x/configuration/
quick start : http://quartz-scheduler.org/documentation/quartz-2.1.x/quick-start
tutorials : http://quartz-scheduler.org/documentation/quartz-2.1.x/tutorials/
examples : http://quartz-scheduler.org/documentation/quartz-2.1.x/examples/
