码迷,mobileinhere.cn
首页 > 其他好文 > 详细

quartz 定时任务的总结(二)

时间:2018-07-31 19:33:03      阅读:11      评论:0      收藏:0      [点我收藏+]

标签:format   mes   设定   tac   exce   lin   时间   for   时间间隔   

简单了解quartz 概念,知道它干什么之后,

我们开始代码之前先了解这几个对象:

1、job

表示一个工作,要执行的具体内容。此接口中只有一个方法
void execute(jobexecutioncontext context)
 
2、jobdetail
jobdetail表示一个具体的可执行的调度程序,job是这个可执行程调度程序所要执行的内容,另外jobdetail还包含了这个任务调度的方案和策略。
 
3、trigger代表一个调度参数的配置,什么时候去调。
 
4、scheduler代表一个调度容器,一个调度容器中可以注册多个jobdetail和trigger。当trigger与jobdetail组合,就可以被scheduler容器调度了。
 
 
 

 

1.首先导入quartz的jar

<!-- quartz 的jar -->
    <dependency>
      <groupid>org.quartz-scheduler</groupid>
      <artifactid>quartz</artifactid>
      <version>2.2.1</version>
    </dependency>
    <dependency>
      <groupid>org.quartz-scheduler</groupid>
      <artifactid>quartz-jobs</artifactid>
      <version>2.2.1</version>
    </dependency>

技术分享图片

 2.创建一个myjob  implements job接口

public class myjob implements job {
    获取jobdatamap的两种方式:
    1.可以通过定义属性, 来获取jobdatamap 的值,不过定义的属性名必须和jobdatamap的key值一样,创建setter getter 方法,就可以直接使用! 如果jobdetail里面的jobdatamap的key值与trigger的key值一样,只能拿到trigger的jobdatamap 的value
    2. 通过jobexecutioncontext 对象 来获取, context.getjobdetail().getjobdatamap();    context.gettrigger().getjobdatamap(); 然后通过get("key值") 就可以获得
    /*private string message;

    public string getmessage() {
        return message;
    }*/

  /*  public void setmessage(string message) {
        this.message = message;
    }*/

    @override
    public void execute(jobexecutioncontext context) throws jobexecutionexception {
        date date = new date();
        simpledateformat format = new simpledateformat("yyyy-mm-dd hh : mm: ss");
        format.format(date);
        jobkey jobkey = context.getjobdetail().getkey();
        string name = jobkey.getname();
        string group = jobkey.getgroup();
        system.out.println("此任务的name: " + name + "组名称 :"+ group + "在"+format.format(date) + "开始运行!");
        jobdatamap jobdatamap = context.getjobdetail().getjobdatamap();


        system.out.println("获取jobdetailmap 的message 的值:" +  jobdatamap.get("message") );
    }
}

 

   3编写测试类

myfristtest类:

  public static void main (string[] args){
        下面的.usingjobdata("message","job1使用的jobdetailmap") 就是给jobdatamap 里面添加key,value;
        jobdetail trigger 都是bulider模式创建,通过.withidentity("job01","group1") 方式设置 name, group,quartz的机制是一个job可以有多个trigger,但是一个trigger只能有一个job。
        
        jobdetail jobdetail = jobbuilder.newjob(myjob.class).withidentity("job01","group1").usingjobdata("message","job1使用的jobdetailmap").build();

        设定时间戳 启动3秒后开始执行,时间间隔是每两秒执行一次
      long currenttimemillis = system.currenttimemillis();
        simpledateformat format = new simpledateformat("yyyy- mm -dd hh:mm:ss");
        system.out.println("当前时间是:"+    format.format(new date()));
        currenttimemillis +=  3000;

        date date = new date(currenttimemillis);
        simpledateformat format1 = new simpledateformat("yyyy- mm -dd hh:mm:ss");

        system.out.println("开始时间是:"+    format1.format(date));
       /* try {
            thread.sleep(3000);
        } catch (interruptedexception e) {
            e.printstacktrace();
        }*/

        trigger trigger = triggerbuilder.newtrigger().withidentity("trigger01","triggergroup01").withschedule(simpleschedulebuilder.repeatsecondlyforever(2)).startat(date).build();
        获取scheduler调度器,
        schedulerfactory sf = new stdschedulerfactory();
        try {
            scheduler scheduler =sf.getscheduler();
            开始调度
            scheduler.start();
            调度jobdetail和trigger
            scheduler.schedulejob(jobdetail,trigger);
        } catch (schedulerexception e) {
            e.printstacktrace();
        }

4.运行结果:

技术分享图片

 

quartz 定时任务的总结(二)

标签:format   mes   设定   tac   exce   lin   时间   for   时间间隔   

原文地址:www.cnblogs.com/laosunlaiye/p/9396989.html

(0)
(0)
   
举报
评论 一句话评论(0
0条  
登录后才能评论!
2014 mobileinhere.cn 版权所有 京icp备13008772号-2
华人娱乐注册