package com.kay.quartz.manager;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Date;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleTrigger;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
import com.kay.quartz.QuartzJob0;
import com.kay.quartz.QuartzJob1;
public class Test {
public static void main(String[] args) throws Exception {
// 调用手动设置的job
// runJobByHand() ;
// getJobFromDb();
getCornJobFromDb();
}
/**
* 1.手动新建任务
* @throws Exception
*/
public static void runJobByHand() throws Exception {
// 新建 scheduler
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
//开启 scheduler
scheduler.start();
JobDetail jobDetail = new JobDetail("helloWorldJob",
Scheduler.DEFAULT_GROUP, QuartzJob0.class);
//传递参数
jobDetail.getJobDataMap().put("para0", "value0");
Trigger trigger = new SimpleTrigger("simpleTrigger",
Scheduler.DEFAULT_GROUP, new Date(), null,
SimpleTrigger.REPEAT_INDEFINITELY, 1000);
scheduler.scheduleJob(jobDetail, trigger);
scheduler.getCurrentlyExecutingJobs();
//==============================================
JobDetail jobDetail1 = new JobDetail("helloWorldJob1",
Scheduler.DEFAULT_GROUP, QuartzJob1.class);
//传递参数
jobDetail1.getJobDataMap().put("para1", "value1");
Trigger trigger1 = new SimpleTrigger("simpleTrigger1",
Scheduler.DEFAULT_GROUP, new Date(), null,
SimpleTrigger.REPEAT_INDEFINITELY, 1000);
scheduler.scheduleJob(jobDetail1, trigger1);
}
/**
* 2.通过读取数据库配置信息来生成一般的调度任务
* @throws Exception
*/
public static void getJobFromDb() throws Exception {
Statement st = getStatement();
String sql = "select * from quartz";
ResultSet rs = st.executeQuery(sql);
while (rs.next()) {
//获取jobClass
String jobClass = rs.getString(2);
//获取jobName
String jobName = rs.getString(3);
//获取groupName
String groupName = rs.getString(4);
//获取param
String param = rs.getString(5);
//获取triggerName
String triggerName = rs.getString(6);
//获取startTime
Date startTime = rs.getDate(7);
//获取repeatCount
int repeatCount = rs.getInt(8);
//获取endTime
Date endTime = rs.getDate(9);
//获取interVal
int interVal = rs.getInt(10);
// 新建 scheduler
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
//开启 scheduler
scheduler.start();
JobDetail jobDetail = new JobDetail(jobName,groupName,Class.forName(jobClass));
//传递参数
jobDetail.getJobDataMap().put("param", param);
Trigger trigger = new SimpleTrigger(triggerName, groupName,startTime, endTime, repeatCount,interVal);
scheduler.scheduleJob(jobDetail, trigger);
scheduler.getCurrentlyExecutingJobs();
}
}
/**
* 3.通过读取数据库配置信息来执行调度任务(使用corn表达方式)
* @throws Exception
*/
public static void getCornJobFromDb() throws Exception {
//获取数据库的数据,并保存为双层集合,然后放到pageContext中
//这样与使用dao和servlet得到的,放到request中的方式是一致的
Statement st = getStatement();
String sql = "select * from quartz_cron";
ResultSet rs = st.executeQuery(sql);
while (rs.next()) {
//获取jobClass
String jobClass = rs.getString(2);
//获取jobName
String jobName = rs.getString(3);
//获取groupName
String groupName = rs.getString(4);
//获取param
String param = rs.getString(5);
//获取triggerName
String triggerName = rs.getString(6);
String cornExpress = rs.getString(7);
// 新建 scheduler
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
//开启 scheduler
scheduler.start();
JobDetail jobDetail = new JobDetail(jobName,groupName,Class.forName(jobClass));
//传递参数
jobDetail.getJobDataMap().put("param", param);
CronTrigger cronTrigger = new CronTrigger(triggerName, groupName, cornExpress);
scheduler.scheduleJob(jobDetail, cronTrigger);
scheduler.getCurrentlyExecutingJobs();
}
}
public static Statement getStatement() throws Exception {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/test?characterEncoding=utf-8";
Connection cn = DriverManager.getConnection(url, "root", "test");
Statement st = cn.createStatement();
return st;
}
}