任务调度框架Quartz实例

来源:互联网 发布:dnf盗号软件 编辑:程序博客网 时间:2024/05/01 11:10

 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="启动"  onclick="start();">    <input type="button" value="停止"  onclick="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>


文章参考http://blog.csdn.net/yuebinghaoyuan/article/details/9045471           http://topmanopensource.iteye.com/blog/1125753

0 0