Quartz笔记

第一个quartz例子

依赖包


        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.2.3</version>
        </dependency>
package com.example.demo.quartz;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

public class HelloScheduler {

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

        // 创建一个JobDetail实例,将该实例与HelloJob Class绑定,然后给他创建唯一标识,属于
        // 哪个组,再调用build方法将其创建出来
        JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
                .withIdentity("myJob","group1").build();


        //jobDetail里的属性打印

        System.out.println("jobDetail's name "+jobDetail.getKey().getName());
        System.out.println("jobDetail's group "+jobDetail.getKey().getGroup());
        System.out.println("jobDetail's jobClass "+jobDetail.getJobClass().getName());


        //创建trigger实例
        Trigger trigger = TriggerBuilder
                .newTrigger()
                .withIdentity("myTrigger", "group1")//创建唯一标识,组虽然和jobDetail里的名字相同,但他们不是一回事
                .startNow()//立马开始执行
                .withSchedule(

                        SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()

                        )//每两秒执行一次,一直执行
                .build();


       // 创建Scheduler实例
        SchedulerFactory sfact = new StdSchedulerFactory();
        Scheduler scheduler = sfact.getScheduler();
        scheduler.start();

        //打印当前的时间
        Date date = new Date();
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(sf.format(date));



        scheduler.scheduleJob(jobDetail, trigger);





    }

}
package com.example.demo.quartz;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class HelloJob implements Job {

    @Override
    public void execute(JobExecutionContext arg0) throws JobExecutionException {

        //Calendar calendar = Calendar.getInstance();

        Date date = new Date();
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(sf.format(date));



        // 编写具体业务
        System.out.println("hello world!");



    }

}

2 浅谈job和jobDetail

job定义:实现业务逻辑的任务接口

这里写图片描述

这里写图片描述

这里写图片描述

    由于不同的情景job要传的参数不同,无法通过定义构造函数初始化job,
    所以会新建个job实例然后通过反射机制传参,使用   
    jobExecutionContext 上下文实现

这里写图片描述

这里写图片描述

自定义用户参数并获取

这里写图片描述

package com.example.demo.quartz;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

public class HelloScheduler {

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

        // 创建一个JobDetail实例,将该实例与HelloJob Class绑定,然后给他创建唯一标识,属于
        // 哪个组,再调用build方法将其创建出来
        JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
                .withIdentity("myJob","group1")        
                .usingJobData("message","hello myJob" ) //传入用户自定义的参数
                .usingJobData("FloatJobValue", 3.14F)    //传入用户自定义的参数
                .build();




            //创建trigger实例
        Trigger trigger = TriggerBuilder
                .newTrigger()
                .withIdentity("myTrigger", "group1")//创建唯一标识,组虽然和jobDetail里的名字相同,但他们不是一回事
                .usingJobData("message","hello myTrigger" ) //传入用户自定义的参数
                .usingJobData("DoubleJobValue", 2.0D)    //传入用户自定义的参数
                .startNow()//立马开始执行
                .withSchedule(

                        SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()

                        )//每两秒执行一次,一直执行
                .build();


       // 创建Scheduler实例
        SchedulerFactory sfact = new StdSchedulerFactory();
        Scheduler scheduler = sfact.getScheduler();
        scheduler.start();

        //打印当前的时间
        Date date = new Date();
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(sf.format(date));



        scheduler.scheduleJob(jobDetail, trigger);





    }

}
package com.example.demo.quartz;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.quartz.TriggerKey;

public class HelloJob implements Job {

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {

        //Calendar calendar = Calendar.getInstance();

        Date date = new Date();
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(sf.format(date));



        // 编写具体业务

        //获取jobdetail里的名字和组信息
        JobKey key = context.getJobDetail().getKey();
        System.out.println("my job name and group are :"+key.getName()+key.getGroup());

        //获取Trigger里的名字和组信息
        TriggerKey tkkey = context.getTrigger().getKey();
        System.out.println("my Trigger name and group are :"+tkkey.getName()+tkkey.getGroup());


        //获取jobdetail里自定义的属性值
        JobDataMap dataMap = context.getJobDetail().getJobDataMap();
        String jobMsg = dataMap.getString("message");
        Float FloatJobValue = dataMap.getFloat("FloatJobValue");
        System.out.println("自定义jobd的属性值分别是:"+jobMsg+" ------  "+FloatJobValue);



        //获取Trigger里自定义的属性值
        JobDataMap tdataMap = context.getTrigger().getJobDataMap();
        String TriMsg = tdataMap.getString("message");
        Double DoubleJobValue= tdataMap.getDouble("DoubleJobValue");
        System.out.println("自定义trigger的属性值分别是:"+TriMsg+" ------  "+DoubleJobValue);



        //合并获取jobDetail和Trigger里的参数
        JobDataMap MergeDataMap = context.getMergedJobDataMap();

        //如果job和Trigger里有相同名字的参数,优先显示Trigger里的
        String mes = MergeDataMap.getString("message");
        Double DoubleMes= MergeDataMap.getDouble("DoubleJobValue");
        Float FloatMes = MergeDataMap.getFloat("FloatJobValue");
        System.out.println("自定义trigger和job中的属性值分别是:"+mes+" ------  "+DoubleMes+"-------"+FloatMes);







    }

}

这里写图片描述

通过get和set方法获取用户自定义的参

package com.example.demo.quartz;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.quartz.TriggerKey;

public class HelloJob implements Job {

    private String message;
    private Float FloatJobValue;
    private Double DoubleJobValue;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Float getFloatJobValue() {
        return FloatJobValue;
    }

    public void setFloatJobValue(Float floatJobValue) {
        FloatJobValue = floatJobValue;
    }

    public Double getDoubleJobValue() {
        return DoubleJobValue;
    }

    public void setDoubleJobValue(Double doubleJobValue) {
        DoubleJobValue = doubleJobValue;
    }

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {

        // Calendar calendar = Calendar.getInstance();

        Date date = new Date();
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(sf.format(date));

        // 编写具体业务

        // 获取jobdetail里的名字和组信息
        JobKey key = context.getJobDetail().getKey();
        System.out.println("my job name and group are :" + key.getName() + key.getGroup());

        // 获取Trigger里的名字和组信息
        TriggerKey tkkey = context.getTrigger().getKey();
        System.out.println("my Trigger name and group are :" + tkkey.getName() + tkkey.getGroup());



        //通过get和set方法来获取用户自定义的参数
        System.out.println("参数是:"+message+"---------"+FloatJobValue+"-----------"+DoubleJobValue);





        /*
         * //获取jobdetail里自定义的属性值 JobDataMap dataMap =
         * context.getJobDetail().getJobDataMap(); String jobMsg =
         * dataMap.getString("message"); Float FloatJobValue =
         * dataMap.getFloat("FloatJobValue");
         * System.out.println("自定义jobd的属性值分别是:"+jobMsg+" ------  "+FloatJobValue);
         * 
         * 
         * 
         * //获取Trigger里自定义的属性值 JobDataMap tdataMap =
         * context.getTrigger().getJobDataMap(); String TriMsg =
         * tdataMap.getString("message"); Double DoubleJobValue=
         * tdataMap.getDouble("DoubleJobValue");
         * System.out.println("自定义trigger的属性值分别是:"+TriMsg+" ------  "+DoubleJobValue);
         * 
         * 
         * //合并获取jobDetail和Trigger里的参数 JobDataMap MergeDataMap =
         * context.getMergedJobDataMap();
         * 
         * //如果job和Trigger里有相同名字的参数,优先显示Trigger里的 String mes =
         * MergeDataMap.getString("message"); Double DoubleMes=
         * MergeDataMap.getDouble("DoubleJobValue"); Float FloatMes =
         * MergeDataMap.getFloat("FloatJobValue");
         * System.out.println("自定义trigger和job中的属性值分别是:"+mes+" ------  "+DoubleMes+
         * "-------"+FloatMes);
         */

    }

}

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

开始结束时间trigger属性设置

package com.example.demo.quartz;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

public class HelloScheduler {

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


        //打印当前的时间
                Date date = new Date();
                SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                System.out.println(sf.format(date));


        //获取距离当前时间3秒后的时间
        date.setTime(date.getTime()+3000);  

        //获取距离当前时间6秒后的时间
        Date endDate = new Date();

        endDate.setTime(endDate.getTime()+6000);    




        // 创建一个JobDetail实例,将该实例与HelloJob Class绑定,然后给他创建唯一标识,属于
        // 哪个组,再调用build方法将其创建出来
        JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
                .withIdentity("myJob","group1")        
                .build();





            //创建trigger实例
        Trigger trigger = TriggerBuilder
                .newTrigger()
                .withIdentity("myTrigger", "group1")//创建唯一标识,组虽然和jobDetail里的名字相同,但他们不是一回事
                .startAt(date)//在date指定的那个时间内开始执行
                .endAt(endDate)//在endDATE指定的时间内停止执行
                .withSchedule(

                        SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()

                        )//每两秒执行一次,一直执行
                .build();


       // 创建Scheduler实例
        SchedulerFactory sfact = new StdSchedulerFactory();
        Scheduler scheduler = sfact.getScheduler();
        scheduler.start();
        scheduler.scheduleJob(jobDetail, trigger);





    }

}
package com.example.demo.quartz;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.quartz.Trigger;
import org.quartz.TriggerKey;

public class HelloJob implements Job {



    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {

        // Calendar calendar = Calendar.getInstance();

        Date date = new Date();
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(sf.format(date));

        // 编写具体业务

        System.out.println("hello xueer");
        Trigger trigger = context.getTrigger();

        System.out.println("开始时间:"+sf.format(trigger.getStartTime()));
        System.out.println("结束时间:"+sf.format(trigger.getEndTime()));


    }

}

这里写图片描述

package com.example.demo.quartz;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.SimpleTrigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

public class HelloScheduler {

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


        //打印当前的时间
                Date date = new Date();
                SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                System.out.println(sf.format(date));






        // 创建一个JobDetail实例,将该实例与HelloJob Class绑定,然后给他创建唯一标识,属于
        // 哪个组,再调用build方法将其创建出来
        JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
                .withIdentity("myJob","group1")        
                .build();



        //获取距离当前时间4秒后的时间
                date.setTime(date.getTime()+4000L); 

                //4秒后开始执行,且每隔两秒执行一次,第一次执行之后,再重复执行3次
                SimpleTrigger trigger = (SimpleTrigger)TriggerBuilder
                            .newTrigger()
                            .withIdentity("myTrigger", "group1")//创建唯一标识,组虽然和jobDetail里的名字相同,但他们不是一回事
                            .startAt(date)
                            .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).withRepeatCount(3))
                            .build();




        /*
            //4秒钟之后执行,且仅仅执行一次任务
            SimpleTrigger trigger = (SimpleTrigger)TriggerBuilder
                .newTrigger()
                .withIdentity("myTrigger", "group1")//创建唯一标识,组虽然和jobDetail里的名字相同,但他们不是一回事
                .startAt(date)
                .build();
                */


       // 创建Scheduler实例
        SchedulerFactory sfact = new StdSchedulerFactory();
        Scheduler scheduler = sfact.getScheduler();
        scheduler.start();
        scheduler.scheduleJob(jobDetail, trigger);





    }

}

这里写图片描述

这里写图片描述

猜你喜欢

转载自blog.csdn.net/xueer88888888888888/article/details/80452075