Quartz JAVA - TuPengXiong/TuPengXiong.github.io GitHub Wiki

  1. Quartz是一个完全由Java编写的开源作业调度框架,为在Java应用程序中进行作业调度提供了简单却强大的机制。Quartz允许开发人员根据时间间隔来调度作业。它实现了作业和触发器的多对多的关系,还能把多个作业与不同的触发器关联。简单地创建一个org.quarz.Job接口的Java类,Job接口包含唯一的方法

  2. maven 官网 http://www.quartz-scheduler.org/downloads/

 <dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.2.1</version>
  </dependency>
  <dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz-jobs</artifactId>
    <version>2.2.1</version>
  </dependency>   
  1. 指定时间触发定时任务
package xyz.kingsilk.common.service.service

import grails.transaction.Transactional
import org.quartz.CronTrigger
import org.quartz.JobDetail
import org.quartz.JobKey
import org.quartz.Scheduler
import org.quartz.impl.JobDetailImpl
import org.quartz.impl.StdSchedulerFactory
import org.quartz.impl.triggers.CronTriggerImpl

@Transactional
class CustomJobService {

    /**
     * 指定时间触发定时任务
     * @param name ;任务名字;
     * @param description ;任务描述;
     * @param date ;触发时间
     * @param jobClass ;定时任务触发的class 该类必须实现org.quartz.Job 且重写 execute方法
     */
    public void start(String name, String description, Date date, Class jobClass) {
        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
        scheduler.start();
        if (scheduler.checkExists(new JobKey(name))) {
            log.debug("定时任务名字已经存在")
            scheduler.deleteJob(new JobKey(name))
        }
        JobDetail jd = new JobDetailImpl(name, jobClass);
        CronTrigger ct = new CronTriggerImpl(name);
        ct.description = description
        Calendar calendar = Calendar.getInstance()
        calendar.setTime(date)
        //时间格式: <!-- s m h d m w(?) y(?) -->,   分别对应: 秒>分>小时>日>月>周>年
        //注意  day-of-week AND a day-of-month 只可以使用一个 而另外一个需要用 ? 处理 ---?表示不确定的值
        StringBuilder sb = new StringBuilder()
        sb.append(calendar.get(Calendar.SECOND))
        sb.append(" ")
        sb.append(calendar.get(Calendar.MINUTE))
        sb.append(" ")
        sb.append(calendar.get(Calendar.HOUR_OF_DAY))
        sb.append(" ")
        sb.append(calendar.get(Calendar.DAY_OF_MONTH))
        //sb.append("?")
        sb.append(" ")
        sb.append(calendar.get(Calendar.MONTH) + 1)
        sb.append(" ")
        sb.append("?")
        //sb.append(calendar.get(Calendar.DAY_OF_WEEK))
        sb.append(" ")
        sb.append(calendar.get(Calendar.YEAR))
        log.debug("表达式cron:${sb.toString()}")
        ct.setCronExpression(sb.toString());
        scheduler.scheduleJob(jd, ct);
    }
}

⚠️ **GitHub.com Fallback** ⚠️