quartz 一个Java的定时器框架 入门心得

quartz是一个定时器框架,可以用它在java里做些什么?

比如,每天 00.00.00 时服务器刷新缓存,清除已过期的数据,或是每到各种节日,固定给user发送祝福消息提醒。

话不多说,首先下载jar包:

    //定时器 quartz
    compile group: 'org.quartz-scheduler', name: 'quartz', version: '2.3.0'

然后核心代码如下:

package job;

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Rock-Ayl 2019-4-30
 * 这个是注册并实现quartz框架的定时管理任务的class,有两种设置定时任务的方式
 * <p>
 * 1:-简单的定时器实现:使用简单的时间表生成器.设定任务.每多少小时执行一次(1).次数不限;
 * <p>
 * 2:corn表达式实现 corn表达式类似正则表达式,可以称呼它为 时间正则表达式   eg: '0 0 0 * * ?' : '每天0点执行一次'
 * <p>
 */
public class Scheduler {

    protected static Logger logger = LoggerFactory.getLogger(Scheduler.class);
    //静态调度程序,由FileServer默认启动
    public static org.quartz.Scheduler instance;
    //存储 工作任务&任务条件 对象的list
    protected static List<ScheduleTask> tasks = new ArrayList();

    //简单实现:每一小时执行一次
    private static final SimpleScheduleBuilder simpleScheduleBuilder = SimpleScheduleBuilder.simpleSchedule().withIntervalInHours(1).repeatForever();
    //cron:每天0点执行一次
    private static final CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0 0 0 * * ?");

    //Task类,存放job和trigger
    static class ScheduleTask {
        public JobDetail job;
        public Trigger trigger;

        public ScheduleTask(JobDetail job, Trigger trigger) {
            this.job = job;
            this.trigger = trigger;
        }
    }

    //注册打印定时器- 简单定时器实现
    private static void registerPrintJob() {
        String jobName = "PrintJob";
        String jobGroup = "file";
        JobDetail job = JobBuilder.newJob(PrintJob.class).withIdentity(jobName, jobGroup).build();
        Trigger trigger = TriggerBuilder.newTrigger().withIdentity(jobName, jobGroup).startNow().withSchedule(simpleScheduleBuilder).build();
        tasks.add(new ScheduleTask(job, trigger));
    }

    //启动Scheduler
    public static void startup() {
        try {
            instance = StdSchedulerFactory.getDefaultScheduler();
            //启动注册到list
            registerPrintJob();
            for (ScheduleTask task : tasks) {
                instance.scheduleJob(task.job, task.trigger);
            }
            instance.start();
            logger.info(">>>file scheduler start.");
        } catch (SchedulerException se) {
            logger.error("工作调度程序启动错误:" + se.getMessage(), se);
        }
    }

    //关闭Scheduler
    public static void stop() {
        try {
            instance.shutdown();
        } catch (Exception e) {
            logger.error("工作调度程序关闭错误[{}]", e);
        }
    }
}

业务层:

package job;

import org.quartz.DisallowConcurrentExecution;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
/**
 * Created by Rock-Ayl 2019-5-10
 * 打印任务的demo
 */
@DisallowConcurrentExecution
public class PrintJob implements Job {

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        System.out.println("执行定时器任务ing...");
    }

}

两个代码写入后简单运行下就可以了。


版权声明:本文为qq_42461790原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。