1.pom.xml 引入依赖
<!-- quartz -->
<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>
2.quartz.properties 配置文件.
#JDBC驱动
org.quartz.dataSource.qzDS.driver:com.mysql.jdbc.Driver
org.quartz.dataSource.qzDS.URL:jdbc:mysql://localhost:3306/quartz_test
org.quartz.dataSource.qzDS.user:root
org.quartz.dataSource.qzDS.password:root
org.quartz.dataSource.qzDS.maxConnection:10
3.MyJob.java
package com.dufy.jdbctest;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyJob implements Job{
private static final Logger log = LoggerFactory.getLogger(MyJob.class);
@Override
public void execute(JobExecutionContext context)throws JobExecutionException {
log.info("MyJob is start ..................");
log.info("Hello quzrtz "+
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss ").format(new Date()));
log.info("MyJob is end .....................");
}
}
4.QuartzJdbcTest.java
package com.dufy.jdbctest;
import java.text.ParseException;
import java.util.List;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.SimpleTrigger;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import org.quartz.impl.StdSchedulerFactory;
public class QuartzJdbcTest {
public static void main(String[] args) throws SchedulerException,
ParseException {
startSchedule();
//resumeJob();
}
/**
* 开始一个simpleSchedule()调度
*/
public static void startSchedule() {
try {
// 1、创建一个JobDetail实例,指定Quartz
JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
// 任务执行类
.withIdentity("job1_1", "jGroup1")
// 任务名,任务组
.build();
//触发器类型
SimpleScheduleBuilder builder = SimpleScheduleBuilder
// 设置执行次数
.repeatSecondlyForTotalCount(5);
//CronScheduleBuilder builder = CronScheduleBuilder.cronSchedule("0/2 * * * * ?");
// 2、创建Trigger
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("trigger1_1", "tGroup1").startNow()
.withSchedule(builder)
.build();
// 3、创建Scheduler
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.start();
// 4、调度执行
scheduler.scheduleJob(jobDetail, trigger);
try {
Thread.sleep(60000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//关闭调度器
scheduler.shutdown();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
/**
* 从数据库中找到已经存在的job,并重新开户调度
*/
public static void resumeJob() {
try {
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
JobKey jobKey = new JobKey("job1_1", "jGroup1");
List<? extends Trigger> triggers = scheduler.getTriggersOfJob(jobKey);
//SELECT TRIGGER_NAME, TRIGGER_GROUP FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND JOB_NAME = ? AND JOB_GROUP = ?
// 重新恢复在jGroup1组中,名为job1_1的 job的触发器运行
if(triggers.size() > 0){
for (Trigger tg : triggers) {
// 根据类型判断
if ((tg instanceof CronTrigger) || (tg instanceof SimpleTrigger)) {
// 恢复job运行
scheduler.resumeJob(jobKey);
}
}
scheduler.start();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}