Quartz框架是一个全功能、开源的任务调度服务,可以集成几乎任何的java应用程序—从小的单片机系统到大型的电子商务系统。Quartz可以执行上千上万的任务调度。
核心概念
Quartz核心的概念
:scheduler任务调度、Job任务、Trigger触发器、JobDetail任务细节
1.下载相应的jar包:http://www.quartz-scheduler.org/
2.写一个执行任务类
package cn.quartz;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
/**
* 需要执行的任务
* @author zwj
*/
public class Myjob implements Job{
//把要执行的操作,写在execute方法中
public void execute(JobExecutionContext arg0) throws JobExecutionException {
System.out.println("执行Quartz===="+new Date());
}
}
3.使用CornTrigger触发器:
package cn.quartz;
import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
/**
* 调度任务类
* @author zwj
*/
public class CronTriggerTest {
static SchedulerFactory schedulerfactory=new StdSchedulerFactory();
static Scheduler scheduler=null;
public static void triggerTest(){
try {
// 通过schedulerFactory获取一个调度器
scheduler=schedulerfactory.getScheduler();
// 创建jobDetail实例,绑定Job实现类
// 指明job的名称,所在组的名称,以及绑定job类
JobDetail job=JobBuilder.newJob(Myjob.class).withIdentity("job1", "jgroup1").build();
// 定义调度触发规则
// 使用simpleTrigger规则
// 使用cornTrigger规则 每天10点42分
Trigger trigger=TriggerBuilder.newTrigger().withIdentity("simpleTrigger", "triggerGroup")
.withSchedule(CronScheduleBuilder.cronSchedule("0 48 22 * * ?"))
.startNow().build();
// 把作业和触发器注册到任务调度中
scheduler.scheduleJob(job, trigger);
// 启动调度
// scheduler.start();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 启动quartz
*/
public static void startQuartz(){
try {
triggerTest();
scheduler.start();
System.out.println("启动成功");
} catch (SchedulerException e) {
e.printStackTrace();
System.out.println("启动失败");
}
}
/**
* 关闭quartz
*/
public static void shutdownQuartz(){
try {
// triggerTest();
scheduler.shutdown();
} catch (SchedulerException e) {
e.printStackTrace();
System.out.println("关闭失败");
}
}
}
4.写一个控制器servlet用来控制quartz的开启与关闭
package cn.quartz;
import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 启动或停止quartz
* @author Auser
*/
public class StartOrEndQuartz extends HttpServlet{
public void service(HttpServletRequest request,HttpServletResponse response){
try {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String flag=request.getParameter("flag");
System.out.println(flag);
if(flag.equals("1")){
CronTriggerTest.startQuartz();
}
if(flag.equals("2")){
CronTriggerTest.shutdownQuartz();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
5.编写一个控制页面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>quartz</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script type="text/javascript">
function start(){
document.getElementById('flag').value=1;
document.getElementById('quartz').submit();
}
function shutdown(){
document.getElementById('flag').value=2;
document.getElementById('quartz').submit();
}
</script>
</head>
<body>
<form id="quartz" action="quartz.do" method="post">
<input type="hidden" id="flag" name="flag" value=""/>
<input type="button" value="启动" οnclick="start();">
<input type="button" value="停止" οnclick="shutdown();">
</form>
</body>
</html>
6.配置web.xml
<servlet>
<servlet-name>quartz</servlet-name>
<servlet-class>cn.quartz.StartOrEndQuartz</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>quartz</servlet-name>
<url-pattern>/quartz.do</url-pattern>
</servlet-mapping>