配色: 字号:
Quartz插件的使用
2016-10-14 | 阅:  转:  |  分享 
  
Quartz插件的使用



Quartz框架提供了几种用于扩展平台能力的方式。通过使用各种"钩子"(通常指的就是扩展点),Quartz变得很容易被扩展和定制化来适应你的需要。其中一个最简单的扩展框架的方法就是使用Quartz插件。本章就来看看如何使用插件机制让Quartz进入到之前Quartz用户没去过的领域。



一、使用Quartz自带插件范例

下面将使用插件实现从XML得到JOB,不用手工的把job和trigger加到Scheduler中去再来运行,这样就很方便。如果要更改任务,直接在xml中配置就可以了。不用再写Java代码。



1、首先是job类:

[java]viewplaincopy

packagecom.mucfc;



importjava.util.Date;

importjava.util.Set;



importorg.quartz.DisallowConcurrentExecution;

importorg.quartz.InterruptableJob;

importorg.quartz.Job;

importorg.quartz.JobDataMap;

importorg.quartz.JobExecutionContext;

importorg.quartz.JobExecutionException;

importorg.quartz.JobKey;

importorg.quartz.PersistJobDataAfterExecution;

importorg.quartz.UnableToInterruptJobException;

importorg.slf4j.Logger;

importorg.slf4j.LoggerFactory;



@PersistJobDataAfterExecution

@DisallowConcurrentExecution

publicclassSimpleJobimplementsJob{



privatestaticLoggerlog=LoggerFactory.getLogger(SimpleJob.class);

privateJobKeyjobkey=null;



@Override

publicvoidexecute(JobExecutionContextcontext)throwsJobExecutionException{

jobkey=context.getJobDetail().getKey();



log.info("Excutingjob:"+jobkey+"executingat"+newDate()+"fireby:"+context.getTrigger().getKey());



if(context.getMergedJobDataMap().size()>0){

Setkeys=context.getMergedJobDataMap().keySet();

for(Stringkey:keys){

Stringvalue=context.getMergedJobDataMap().getString(key);

log.info("jobdatamapentry:"+key+"="+value);

}

context.setResult("hello");

}





}



}



2、job触发时间配置,使用quartz_data.xml

[html]viewplaincopy




xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingDatahttp://www.quartz-scheduler.org/xml/job_scheduling_data_1_8.xsd"

version="1.8">

















true



false









TestJob1

com.mucfc.SimpleJob







TestDurableJob

com.mucfc.SimpleJob

true

false









TestSimpleTrigger1AtFiveSecondInterval

TestJob1

-1

5000









TestJob2

GroupOfTestJob2

ThisisthedescriptionofTestJob2

com.mucfc.SimpleJob

false

true





someKey

someValue





someOtherKey

someOtherValue













TestSimpleTrigger2AtTenSecondIntervalAndFiveRepeats

GroupOfTestJob2Triggers

TestJob2

GroupOfTestJob2

2010-02-09T10:15:00

MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_EXISTING_REPEAT_COUNT

5

10000











TestCronTrigger2AtEveryMinute

GroupOfTestJob2Triggers

TestJob2

GroupOfTestJob2





someKey

overriddenValue





someOtherKey

someOtherOverriddenValue





0?











TestCronTrigger2AtEveryMinuteOnThe45thSecond

GroupOfTestJob2Triggers

TestJob2

GroupOfTestJob2

2015-05-12T12:26:00.0

2015-05-16T12:26:00.0

MISFIRE_INSTRUCTION_SMART_POLICY

45?

America/Los_Angeles











3、配置文件

[plain]viewplaincopy

#============================================================================

#ConfigureMainSchedulerProperties

#============================================================================



org.quartz.scheduler.instanceName:TestScheduler

org.quartz.scheduler.instanceId:AUTO



org.quartz.scheduler.skipUpdateCheck:true



#============================================================================

#ConfigureThreadPool

#============================================================================



org.quartz.threadPool.class:org.quartz.simpl.SimpleThreadPool

org.quartz.threadPool.threadCount:3

org.quartz.threadPool.threadPriority:5



#============================================================================

#ConfigureJobStore

#============================================================================



org.quartz.jobStore.misfireThreshold:60000



org.quartz.jobStore.class:org.quartz.simpl.RAMJobStore



#org.quartz.jobStore.class:org.quartz.impl.jdbcjobstore.JobStoreTX

#org.quartz.jobStore.driverDelegateClass:org.quartz.impl.jdbcjobstore.PostgreSQLDelegate

#org.quartz.jobStore.useProperties:false

#org.quartz.jobStore.dataSource:myDS

#org.quartz.jobStore.tablePrefix:QRTZ_

#org.quartz.jobStore.isClustered:false



#============================================================================

#ConfigureDatasources

#============================================================================



#org.quartz.dataSource.myDS.driver:org.postgresql.Driver

#org.quartz.dataSource.myDS.URL:jdbc:postgresql://localhost/dev

#org.quartz.dataSource.myDS.user:jhouse

#org.quartz.dataSource.myDS.password:

#org.quartz.dataSource.myDS.maxConnections:5







#============================================================================

#ConfigurePlugins

#============================================================================



org.quartz.plugin.triggHistory.class:org.quartz.plugins.history.LoggingJobHistoryPlugin

org.quartz.plugin.jobInitializer.class:org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin

org.quartz.plugin.jobInitializer.fileNames:quartz_data.xml

org.quartz.plugin.jobInitializer.failOnFileNotFound:true

org.quartz.plugin.jobInitializer.www.baiyuewang.netscanInterval:120

org.quartz.plugin.jobInitializer.wrapInUserTransaction:false



其中org.quartz.plugin.jobInitializer.class:org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin会自动加载quartz_data.xml中的trigger和job到Scheduler

3、测试

[java]viewplaincopy

packagecom.mucfc;



importjava.util.Calendar;

importjava.util.Date;

importjava.util.GregorianCalendar;



importorg.quartz.DateBuilder;

importorg.quartz.JobBuilder;

importorg.quartz.JobDetail;

importorg.quartz.Matcher;

importorg.quartz.Scheduler;

importorg.quartz.SchedulerFactory;

importorg.quartz.SchedulerMetaData;

importorg.quartz.SimpleScheduleBuilder;

importorg.quartz.SimpleTrigger;

importorg.quartz.Trigger;

importorg.quartz.TriggerBuilder;

importorg.quartz.impl.StdSchedulerFactory;

importorg.quartz.impl.calendar.AnnualCalendar;

importorg.quartz.impl.matchers.KeyMatcher;

importorg.slf4j.Logger;

importorg.slf4j.LoggerFactory;



publicclassPluginExample{

publicstaticvoidrun()throwsException{

Loggerlog=LoggerFactory.getLogger(PluginExample.class);

SchedulerFactorysf=newStdSchedulerFactory();

Schedulersche=sf.getScheduler();





sche.start();



try{

Thread.sleep(300000L);

}catch(Exceptione){

}



sche.shutdown();

SchedulerMetaDatametaData=sche.getMetaData();

log.info("Executed"+metaData.getNumberOfJobsExecuted()+"jobs.");

}



publicstaticvoidmain(String[]args){

PluginExamplesimpleExample=newPluginExample();

try{

simpleExample.run();

}catch(Exceptione){

e.printStackTrace();

}

}

}

献花(0)
+1
(本文系thedust79首藏)