• 定时任务处理-Quartz


    Quartz Scheduler,定时任务 
    Quartz是一个作业调度系统(a job scheduling system),负责在约定的时间到达时执行(或通知)其他软件控制。是一个Java的定时任务框架,使用它可以方便的实现计划任务,即在某个时间或每隔一定时间运行一个任务。Quartz的核心是Job/JobDetail,Trigger和Scheduler。 
    1.Job/JobDetail 
           Job/JobDetail=既要执行的任务,可以通过实现Job(interface)中的excute方法来指定任务的具体操作。 他描述了一个任务具体的信息,比如名称,组名等等。JobDetail对象是在Quartz的客户端(我们的程序)在Job被关联加入到Scheduler时创建的,JobDetail包含了Job的各种属性值和   JobDataMap,JobDataMap中存放了与之相关的Job类实例的状态信息。 

    2.Trigger 
           用于控制一组Job的触发,包裹SimmperTrigger和CronTrigger,后者支持一种描述触发事件和间隔的表达式语言。Quartz有个很好的想法就是分离了任务和任务执行的条件。Trigger就是控制任务执行条件的类,当Trigger认为执行条件满足的时刻,Trigger会通知相关的Job去执行。分离的好处是: 
                1).你可以为某个Job关联多个Trigger,其中任何一个条件满足都可以触发job执行,这样可以完成一些组合的高级触发条件 
                2).当Trigger失效后(比如:一个永远都不能满足的条件),你不必去声明一个新的job,代替的是你可以为job关联一个新的Trigger让job可以继续执行。 
       
    3.Scheduler

           控制和管理触发器的启动和终止。 

    使用Scheduler前必须实例化Scheduler,需要由SchedulerFactory类来创建Scheduler,Factory的实例可以通过在JNDI存储中的Factory的序列化的方式获取,实例化Factory后直接使用该实例很容易。

    例子:

    1.基础配置

    1 org.quartz.scheduler.instanceName = MyScheduler
    2 org.quartz.threadPool.threadCount = 3
    3 org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore

    org.quartz.scheduler.instanceName - This scheduler’s name will be “MyScheduler”.

    org.quartz.threadPool.threadCount - There are 3 threads in the thread pool, which means that a maximum of 3 jobs can be run simultaneously.

    org.quartz.jobStore.class - All of Quartz’s data, such as details of jobs and triggers, is held in memory (rather than in a database)

    2.实例化scheduler,并启动和关闭

     1 import org.quartz.Scheduler;
     2   import org.quartz.SchedulerException;
     3   import org.quartz.impl.StdSchedulerFactory;
     4   import static org.quartz.JobBuilder.*;
     5   import static org.quartz.TriggerBuilder.*;
     6   import static org.quartz.SimpleScheduleBuilder.*;
     7 
     8   public class QuartzTest {
     9 
    10       public static void main(String[] args) {
    11 
    12           try {
    13               // Grab the Scheduler instance from the Factory
    14               Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
    15 
    16               // and start it off
    17               scheduler.start();
    18 
    19               scheduler.shutdown();
    20 
    21           } catch (SchedulerException se) {
    22               se.printStackTrace();
    23           }
    24       }
    25   }

    3.定义自己的Job

    1 public class HelloJob implements org.quartz.Job {
    2 
    3       public HelloJob () {
    4       }
    5 
    6       public void execute(JobExecutionContext context) throws JobExecutionException {
    7           System.err.println("Hello World!  HelloJob is executing.");
    8       }
    9   }

    4.在scheduler启动和关闭之间执行Job

     1 // define the job and tie it to our HelloJob class
     2   JobDetail job = newJob(HelloJob.class)
     3       .withIdentity("job1", "group1")
     4       .build();
     5 
     6   // Trigger the job to run now, and then repeat every 40 seconds
     7   Trigger trigger = newTrigger()
     8       .withIdentity("trigger1", "group1")
     9       .startNow()
    10             .withSchedule(simpleSchedule()
    11               .withIntervalInSeconds(40)
    12               .repeatForever())            
    13       .build();
    14 
    15   // Tell quartz to schedule the job using our trigger
    16   scheduler.scheduleJob(job, trigger);
  • 相关阅读:
    Java之JDBC操作
    Ubuntu17安装MySql5.7
    应用解决告诉你什么时候该用ajax
    jquery插件大全
    面试题:谈谈如何优化MYSQL数据库查询
    1亿条数据在PHP中实现Mysql数据库分表100张
    DEDECMS教程:首页实现分页的两种方法
    Dedecms当前位置{dede:field name='position'/}修改,去掉>方法
    mysql的MyISAM 和 InnoDB 的区别?优化MYSQL数据库的方法?
    COOKIE和SESSION关系和区别等
  • 原文地址:https://www.cnblogs.com/gy19920604/p/5386790.html
Copyright © 2020-2023  润新知