首页 > 其他 > 详细

org.quartz.Job(基于OpenSymphony开源组织在Job scheduling领域的开源项目)

时间:2020-08-28 14:56:37      阅读:105      评论:0      收藏:0      [点我收藏+]

1.介绍(感觉Spring框架Quartz也是基于这个封装的)

     Quartz是OpenSymphony开源组织在Job scheduling领域一个开源项目,

     它可以与J2EE与J2SE应用程序相结合也可以单独使用。

     Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。

     Jobs可以做成标准的Java组件或 EJBs。

 

2.简单的实现

    第一步:

           引包:log4j-1.2.16,quartz-2.1.7,slf4j-api-1.6.1.jar,slf4j-log4j12-1.6.1.jar

            注:这些包都在下载的Quartz包里面包含着,因此没有必要为寻找这几个包而头疼。

     第二步:

           创建要被定执行的任务类:

           创建一个实现了org.quartz.Job接口的类,并实现这个接口的唯一

           一个方法execute(JobExecutionContext arg0) throws JobExecutionException

          实例:

               import java.text.SimpleDateFormat;

               import java.util.Date;

               import org.quartz.Job;

               import org.quartz.JobExecutionContext;

               import org.quartz.JobExecutionException;

              public class myJob implements Job {

                       @Override

                        public void execute(JobExecutionContext arg0)

                            throws JobExecutionException {

                               SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");

                               System.out.println(sdf.format(new Date()));

                          }

          }

   第三步:创建任务调度,并执行

           import java.text.SimpleDateFormat;

           import java.util.Date;

           import org.quartz.CronTrigger;

           import org.quartz.JobDetail;

           import org.quartz.Scheduler;

           import org.quartz.SchedulerFactory;

           import org.quartz.impl.StdSchedulerFactory;

           public class Test {

                   public void go() throws Exception {

                      // 首先,必需要取得一个Scheduler的引用

                      SchedulerFactory sf = new StdSchedulerFactory();

                      Scheduler sched = sf.getScheduler();

                      String time="0 51 11 ? * *";

                      // jobs可以在scheduled的sched.start()方法前被调用

                      // job 1将每隔20秒执行一次

                      JobDetail job = new JobDetail("job1", "group1", myJob.class);

                      CronTrigger trigger = new CronTrigger("trigger1", "group1");

                      trigger.setCronExpression(time);

                      Date ft = sched.scheduleJob(job, trigger);

                      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");

                      System.out.println(job.getKey() + " 已被安排执行于: " + sdf.format(ft) + ",

                                       并且以如下重复规则重复执行: " + trigger.getCronExpression());

                      // job 2将每2分钟执行一次(在该分钟的第15秒)

                      job = new JobDetail("job2", "group1",myJob.class);

                      trigger = new CronTrigger("trigger2", "group1");

                       trigger.setCronExpression(time);

                       ft = sched.scheduleJob(job, trigger);

                       System.out.println(job.getKey() + " 已被安排执行于: " + sdf.format(ft) + ",

                                       并且以如下重复规则重复执行: " + trigger.getCronExpression());

                       // 开始执行,start()方法被调用后,计时器就开始工作,计时调度中允许放入N个Job

                       sched.start();

                       try {

                             // 主线程等待一分钟

                             Thread.sleep(60L * 1000L);

                       } catch (Exception e) {

                       }

                      // 关闭定时调度,定时器不再工作

                      sched.shutdown(true);

                 }

               public static void main(String[] args) throws Exception {

                        Test test = new Test();

                         test.go();

               }

        }

 

 

2.封装一个Job管理器

    import java.text.ParseException; 

    import org.quartz.CronTrigger;

    import org.quartz.JobDetail;

    import org.quartz.Scheduler;

    import org.quartz.SchedulerException;

    import org.quartz.SchedulerFactory;

    import org.quartz.impl.StdSchedulerFactory;

    //定时任务管理类

     public class QuartzManager { 

           private static SchedulerFactory gSchedulerFactory = new StdSchedulerFactory(); 

           private static String JOB_GROUP_NAME = "EXTJWEB_JOBGROUP_NAME"; 

           private static String TRIGGER_GROUP_NAME = "EXTJWEB_TRIGGERGROUP_NAME";

           //添加一个定时任务,使用默认的任务组名,触发器名,触发器组名

           //@param jobName 任务名

           //@param jobClass   任务

           //@param time  时间设置,参考quartz说明文档

           //@throws SchedulerException

           //@throws ParseException

           public static void addJob(String jobName, String jobClass, String time) {

                     try { 

                           Scheduler sched = gSchedulerFactory.getScheduler();

                           // 任务名,任务组,任务执行类      

                           JobDetail jobDetail = new JobDetail(jobName, JOB_GROUP_NAME, Class.forName(jobClass));

                           // 触发器

                           // 触发器名,触发器组 

                           CronTrigger trigger = new CronTrigger(jobName, TRIGGER_GROUP_NAME);

                            trigger.setCronExpression(time);// 触发器时间设定

                            sched.scheduleJob(jobDetail, trigger);

                            // 启动

                            if (!sched.isShutdown()){

                                  sched.start();

                             }

                        } catch (Exception e) { 

                            e.printStackTrace(); 

                            throw new RuntimeException(e);

                        }

                 }

                

             //@param jobName 任务名

             //@param jobClass   任务

  

             //@param time  时间设置,参考quartz说明文档

            //@throws SchedulerException

             //@throws ParseException

 

      

        

 

    

org.quartz.Job(基于OpenSymphony开源组织在Job scheduling领域的开源项目)

原文:https://www.cnblogs.com/HuiShouGuoQu/p/13577137.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!