Quartz JAVA - TuPengXiong/TuPengXiong.github.io GitHub Wiki
-
Quartz是一个完全由Java编写的开源作业调度框架,为在Java应用程序中进行作业调度提供了简单却强大的机制。Quartz允许开发人员根据时间间隔来调度作业。它实现了作业和触发器的多对多的关系,还能把多个作业与不同的触发器关联。简单地创建一个org.quarz.Job接口的Java类,Job接口包含唯一的方法
<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>
- 指定时间触发定时任务
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);
}
}