Spring Quartz 基于数据库管理Job

Spring Quartz可以采用xml形式进行job管理,但此种形式无法动态管理job。

故,推荐采用DB来管理job,此种情况,可以进行动态配置job的执行时间,暂定、启动、删除job等操作。

下面是核心业务类:

import java.sql.SQLException;
import java.text.ParseException;
import java.util.List;
import java.util.Map;

import org.quartz.CronExpression;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;

import com.hafx.codesure.batchjob.bean.JobTriggerCron;
import com.hafx.codesure.batchjob.dao.QuartzDao;
import com.hafx.codesure.batchjob.dao.impl.QuartzDaoImpl;
import com.hafx.codesure.batchjob.service.QuartzOperateService;


public class QuartzOperateServiceImpl
{
    
    public void startScheduler()
        throws SchedulerException
    {
        // Initiate a Schedule Factory
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        // Retrieve a scheduler from schedule factory
        Scheduler scheduler = schedulerFactory.getScheduler();
        scheduler.start();
    }

    public void stopScheduler()
        throws SchedulerException
    {
        // Initiate a Schedule Factory
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        // Retrieve a scheduler from schedule factory
        Scheduler scheduler = schedulerFactory.getScheduler();
        scheduler.shutdown(false);
    }

    public void addJob(String jobName, String jobBean, String triggerName, String CronExp)
        throws SchedulerException, ClassNotFoundException, ParseException
    {
        // Initiate a Schedule Factory
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        // Retrieve a scheduler from schedule factory
        Scheduler scheduler = schedulerFactory.getScheduler();

        // Initiate JobDetail with job name, job group, and executable job class
        JobDetail jobDetail = new JobDetail(jobName, "DEFAULT", Class.forName(jobBean));
        // Initiate CronTrigger with its name and group name
        CronTrigger cronTrigger = new CronTrigger(triggerName, "DEFAULT");

        // setup CronExpression
        CronExpression cexp = new CronExpression(CronExp);
        // Assign the CronExpression to CronTrigger
        cronTrigger.setCronExpression(cexp);

        // schedule a job with JobDetail and Trigger
        scheduler.scheduleJob(jobDetail, cronTrigger);

        // start the scheduler
        //scheduler.rescheduleJob(triggerName,"DEFAULT",cronTrigger);
        scheduler.start();
    }

    public void updateJob(String jobName, String triggerName, String CronExp)
        throws SchedulerException, ClassNotFoundException, ParseException
    {
        // Initiate a Schedule Factory
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        // Retrieve a scheduler from schedule factory
        Scheduler scheduler = schedulerFactory.getScheduler();

        // Initiate CronTrigger with its name and group name
        CronTrigger cronTrigger = new CronTrigger(triggerName, "DEFAULT");

        // setup CronExpression
        CronExpression cexp = new CronExpression(CronExp);
        
        // Assign the CronExpression to CronTrigger
        cronTrigger.setCronExpression(cexp);
        cronTrigger.setJobName(jobName);
        cronTrigger.setJobGroup("DEFAULT");

        // rescheduleJob the job 
        scheduler.rescheduleJob(triggerName, "DEFAULT", cronTrigger);
    }

    public boolean deleteJob(String triggerName, String jobName)
        throws SchedulerException
    {
        // Initiate a Schedule Factory
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        // Retrieve a scheduler from schedule factory
        Scheduler scheduler = schedulerFactory.getScheduler();

        // pauseTrigger
        scheduler.pauseTrigger(triggerName, "DEFAULT");

        // deleteJob
        scheduler.deleteJob(jobName, "DEFAULT");

        // unscheduleJob
        return scheduler.unscheduleJob(triggerName, "DEFAULT");

    }

    public void resumeJob(String triggerName, String jobName)
        throws SchedulerException
    {
        // Initiate a Schedule Factory
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        // Retrieve a scheduler from schedule factory
        Scheduler scheduler = schedulerFactory.getScheduler();

        // resumeTrigger
        scheduler.resumeTrigger(triggerName, "DEFAULT");
        
        // resumeJob
        scheduler.resumeJob(jobName, "DEFAULT");
    }

    public void pauseJob(String triggerName, String jobName)
        throws SchedulerException
    {
        // Initiate a Schedule Factory
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        // Retrieve a scheduler from schedule factory
        Scheduler scheduler = schedulerFactory.getScheduler();
        // pauseTrigger
        scheduler.pauseTrigger(triggerName, "DEFAULT");
        // pauseJob
        scheduler.pauseJob(jobName, Scheduler.DEFAULT_GROUP);
    }
    
        
}

页面:



PS:如有需要对应工程的可以联系我。

PS:使用这种作业的JDBC存储形式,可以充分发挥quartz的集群特性。

2014.3.19 update

建表语句请到官网下载,http://www.quartz-scheduler.org/downloads

下载后,里面的quartz-xx.xx \ docs \ dbTables 里面有各种db的建表语句。


评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值