quartz数据持久化

来源:互联网 发布:淘宝泰州医药城地址 编辑:程序博客网 时间:2024/06/05 05:39

spring-quartz.xml

<context:component-scan base-package="com.test.job" /><!-- 可持久化的quartz --><bean id="scheduler" lazy-init="false" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">    <property name="dataSource" ref="dataSource" />    <property name="autoStartup" value="true" />    <!--自动启动 -->    <property name="startupDelay" value="20" />     <!--延时启动 -->    <property name="applicationContextSchedulerContextKey"  value="applicationContextKey" />     <property name="configLocation" value="WEB-INF/conf/quartz.properties"/></bean>

quartz.properties

org.quartz.scheduler.instanceName: DefaultQuartzScheduler
org.quartz.scheduler.rmi.export: false
org.quartz.scheduler.rmi.proxy: false
org.quartz.scheduler.wrapJobExecutionInUserTransaction: false

org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount: 10
org.quartz.threadPool.threadPriority: 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true
org.quartz.jobStore.misfireThreshold: 60000

org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.scheduler.instanceId: AUTO
org.quartz.jobStore.class: org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.isClustered: true
org.quartz.jobStore.clusterCheckinInterval: 1000

SystemScheduler.java

@Component
public class SystemScheduler{
/** @author xuegang on 2016年3月22日
* @TODO
*/
@Autowired
private Scheduler scheduler;

/** * @author xuegang on 2016年3月22日 * @TODO    add job */public boolean addJob(JobTaskInfo jobTaskInfo) throws SchedulerException{    TriggerKey triggerKey = TriggerKey.triggerKey(jobTaskInfo.getJobName(), Scheduler.DEFAULT_GROUP);    JobKey jobKey = new JobKey(jobTaskInfo.getJobName(), Scheduler.DEFAULT_GROUP);    if(checkExists(jobTaskInfo.getJobName(), Scheduler.DEFAULT_GROUP)){        return false;    }    //不触发立即执行,等待下次Cron触发频率达到时执行    CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(jobTaskInfo.getJobCron())            .withMisfireHandlingInstructionIgnoreMisfires();    CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).withSchedule(cronScheduleBuilder)            .build();    JobDetail jobDetail = JobBuilder.newJob(jobTaskInfo.getJobClass()).withIdentity(jobKey).build();    //JobDataMap jobDataMap = jobDetail.getJobDataMap();   // jobDataMap.putAll(null);    scheduler.scheduleJob(jobDetail, cronTrigger);    return true;}/** * @author xuegang on 2016年3月22日 * @TODO    检查job是否存在 */private boolean checkExists(String jobName, String jobGroup) throws SchedulerException{    TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup);    return scheduler.checkExists(triggerKey);}/** * @author xuegang on 2016年3月22日 * @TODO    重新执行 */public boolean rescheduleJob(JobTaskInfo jobTaskInfo) throws SchedulerException {    // TriggerKey valid if_exists    if (!checkExists(jobTaskInfo.getJobName(), Scheduler.DEFAULT_GROUP)) {        return false;    }    // TriggerKey : name + group    TriggerKey triggerKey = TriggerKey.triggerKey(jobTaskInfo.getJobName(), Scheduler.DEFAULT_GROUP);    JobKey jobKey = new JobKey(jobTaskInfo.getJobName(), Scheduler.DEFAULT_GROUP);    // CronTrigger : TriggerKey + cronExpression    CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(jobTaskInfo.getJobCron()).withMisfireHandlingInstructionDoNothing();    CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build();    //scheduler.rescheduleJob(triggerKey, cronTrigger);    // JobDetail-JobDataMap fresh    JobDetail jobDetail = scheduler.getJobDetail(jobKey);    JobDataMap jobDataMap = jobDetail.getJobDataMap();    jobDataMap.clear();    // Trigger fresh    HashSet<Trigger> triggerSet = new HashSet<Trigger>();    triggerSet.add(cronTrigger);    scheduler.scheduleJob(jobDetail, triggerSet, true);    return true;}/** * @author xuegang on 2016年3月22日 * @TODO    执行job(一次) */public boolean triggerJob(String jobName) throws SchedulerException {    // TriggerKey : name + group    JobKey jobKey = new JobKey(jobName, Scheduler.DEFAULT_GROUP);    boolean result = false;    if (checkExists(jobName, Scheduler.DEFAULT_GROUP)) {        scheduler.triggerJob(jobKey);        result = true;    }    return result;}/** * @author xuegang on 2016年3月22日 * @TODO    停止作业job */public boolean pauseJob(String jobName) throws SchedulerException {    // TriggerKey : name + group    TriggerKey triggerKey = TriggerKey.triggerKey(jobName, Scheduler.DEFAULT_GROUP);    boolean result = false;    if (checkExists(jobName, Scheduler.DEFAULT_GROUP)) {        scheduler.pauseTrigger(triggerKey);        result = true;    }    return result;}/** * @author xuegang on 2016年3月22日 * @TODO    恢复job */public  boolean resumeJob(String jobName) throws SchedulerException {    // TriggerKey : name + group    TriggerKey triggerKey = TriggerKey.triggerKey(jobName, Scheduler.DEFAULT_GROUP);    boolean result = false;    if (checkExists(jobName, Scheduler.DEFAULT_GROUP)) {        scheduler.resumeTrigger(triggerKey);        result = true;    }    return result;}/** * @author xuegang on 2016年3月22日 * @TODO    删除job */public boolean removeJob(String jobName) throws SchedulerException {    // TriggerKey : name + group    TriggerKey triggerKey = TriggerKey.triggerKey(jobName, Scheduler.DEFAULT_GROUP);    boolean result = false;    if (checkExists(jobName, Scheduler.DEFAULT_GROUP)) {        result = scheduler.unscheduleJob(triggerKey);    }    return result;}

}

定义JobTaskInfo.java,SystemJob implements Job

0 0