quartz数据持久化

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值