Quartz

来源:互联网 发布:java教程视频下载 编辑:程序博客网 时间:2024/06/06 02:08
Quartz框架核心概念
Quartz对任务调度进行了高度抽象,提出了3个核心概念,并在org.quartz包中通过接口和类进行了描述
任务:就是执行的工作内容。Quartz提供Job接口来支持任务定义
触发器:定义触发Job执行的时间触发规则。Quartz提供Trigger类及其子类支持触发器功能,
调度器:Quartz提供了Scheduler接口,将工作任务和触发器绑定,保证任务可以在正确的时间执行

cron表达式



示例

一  框架基础

类1  任务类

public class RemindJob implements Job {

    /**
     * 业务实现
     * 
     * 开发时间:2016-3-2 下午6:10:06
     * 
     * @author:
     * @param context
     * @throws JobExecutionException
     */
    @Override
    public void execute(JobExecutionContext context)
            throws JobExecutionException {

        System.out.println("您有一封邮件没有阅读。");

    }

}

调用类  
public class Demo implements Serializable {

    /**
     * 入口函数值
     * 
     * 开发时间:2016-3-2 下午6:11:59
     * 
     * @author:
     * @param:args-传入的参数
     * @return void
     * @param args
     */
    public static void main(String[] args) {

        try {
            // 创建job实例
            JobDetail jobDetail = new JobDetail("刘", "g1",
                    RemindJob.class);
            // 创建一个触发器
            SimpleTrigger trigger = new SimpleTrigger("remindJobTrigger",
                    SimpleTrigger.REPEAT_INDEFINITELY, 3000);
            // 设置启动时间
            trigger.setStartTime(new Date(System.currentTimeMillis() + 15000));
            // 创建调度者工厂
            SchedulerFactory factory = new StdSchedulerFactory();
            // 创建一个调度者
            Scheduler scheduler = factory.getScheduler();
            // 注册并进行调度
            scheduler.scheduleJob(jobDetail, trigger);
            // 启动调度  多线程  分出一个线程执行此任务
            scheduler.start();
            // sleep10s
            Thread.sleep(25000);
            // 关闭调度
            scheduler.shutdown();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}





代码二  时间配置  传参  Map


类1 
public class RemindJob implements Job {

    /**
     * 业务实现
     * 
     * 开发时间:2016-3-2 下午6:10:06
     * 
     * @author:
     * @param context
     * @throws JobExecutionException
     */
    @Override
    public void execute(JobExecutionContext context)
            throws JobExecutionException {

        // 数据集合
        JobDataMap dataMap = context.getJobDetail().getJobDataMap();
        // 真实姓名
        String trueName = dataMap.getString("trueName");

        System.out.println(trueName + ",您有一封邮件没有阅读。");

    }

}

类2

public class Demo implements Serializable {

    /**
     * 入口函数值
     * 
     * 开发时间:2016-3-2 下午6:11:59
     * 
     * @author:
     * @param:args-传入的参数
     * @return void
     * @param args
     */
    public static void main(String[] args) {

        try {
            // 创建job实例
            JobDetail jobDetail = new JobDetail("remindJob", "g1",
                    RemindJob.class);

            // 数据集合
            JobDataMap dataMap = jobDetail.getJobDataMap();
            // 存储姓名
            dataMap.put("trueName", "张三");

            // 创建一个触发器
            CronTrigger trigger = new CronTrigger("remindJobTrigger", "g1",
                    "0/3 * * ? * * *");
            // 设置启动时间
            trigger.setStartTime(new Date(System.currentTimeMillis() + 1000));
            // 创建调度者工厂
            SchedulerFactory factory = new StdSchedulerFactory();
            // 创建一个调度者
            Scheduler scheduler = factory.getScheduler();
            // 注册并进行调度
            scheduler.scheduleJob(jobDetail, trigger);
            // 启动调度
            scheduler.start();
            // sleep10s
            Thread.sleep(10000);
            // 关闭调度
            scheduler.shutdown();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}



项目三  实例  插入  移除

类1
public class RemindJob implements Job {

    /**
     * 业务实现
     * 
     * 开发时间:2016-3-2 下午6:10:06
     * 
     * @author:
     * @param context
     * @throws JobExecutionException
     */
    @Override
    public void execute(JobExecutionContext context)
            throws JobExecutionException {

        // 数据集合
        JobDataMap dataMap = context.getJobDetail().getJobDataMap();
        // 真实姓名
        String trueName = dataMap.getString("trueName");

        System.out.println(trueName + ",您有一封邮件没有阅读。");

    }

}

类2

public class Demo implements Serializable {

    /**
     * 入口函数值
     * 
     * 开发时间:2016-3-2 下午6:11:59
     * 
     * @author:
     * @param:args-传入的参数
     * @return void
     * @param args
     */
    public static void main(String[] args) {

        try {
            // 创建job实例
            JobDetail jobDetail = new JobDetail("remindJob", "g1",
                    RemindJob.class);

            // 数据集合
            JobDataMap dataMap = jobDetail.getJobDataMap();
            // 存储姓名
            dataMap.put("trueName", "张三");

            // 创建一个触发器
            CronTrigger trigger = new CronTrigger("remindJobTrigger", "g1",
                    "0/3 * * ? * * *");
            // 设置启动时间
            trigger.setStartTime(new Date(System.currentTimeMillis() + 1000));
            // 创建调度者工厂
            SchedulerFactory factory = new StdSchedulerFactory();
            // 创建一个调度者
            Scheduler scheduler = factory.getScheduler();

            // 创建Calendar
            AnnualCalendar cal = new AnnualCalendar();
            // 构建日期
            Calendar myCal1 = GregorianCalendar.getInstance();
            myCal1.set(Calendar.MONTH, Calendar.JUNE);
            myCal1.set(Calendar.DATE, 21);
            Calendar myCal2 = GregorianCalendar.getInstance();
            myCal2.set(Calendar.MONTH, Calendar.JUNE);
            myCal2.set(Calendar.DATE, 20);
            // 设定要排除的日期 如果设置为false则为包含
            cal.setDayExcluded(myCal1, true);
            cal.setDayExcluded(myCal2, true);
            // 注册Calendar replace,updateTriggers
            // 如果updateTriggers为true,Scheduler中已引用Calendar的Trigger将得到更新。
            scheduler.addCalendar("calendar1", cal, true, true);
            // 和触发器进行关联
            trigger.setCalendarName("calendar1");

            // 注册并进行调度
            scheduler.scheduleJob(jobDetail, trigger);
            // 启动调度
            scheduler.start();

            // sleep1000s
            Thread.sleep(2000);
            // 添加新的排除  此为下面的方法  插入进来
            replaceAndUpdate(scheduler, trigger);

            // sleep1000s
            Thread.sleep(1000000);
            // 关闭调度
            scheduler.shutdown();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /**
     * 添加新的排除
     * 
     * 
     * 开发时间:2016-3-2 下午6:40:53
     * 
     * @author:
     * @param scheduler
     * @param trigger
     */
    protected static void replaceAndUpdate(Scheduler scheduler,
            CronTrigger trigger) {

        try {
            // 创建Calendar
            AnnualCalendar cal = new AnnualCalendar();
            // 构建日期
            Calendar myCal1 = GregorianCalendar.getInstance();
            myCal1.set(Calendar.MONTH, Calendar.JUNE);
            myCal1.set(Calendar.DATE, 22);
            Calendar myCal2 = GregorianCalendar.getInstance();
            myCal2.set(Calendar.MONTH, Calendar.JUNE);
            myCal2.set(Calendar.DATE, 23);
            // 设定要排除的日期 如果设置为false则为包含
            cal.setDayExcluded(myCal1, true);
            cal.setDayExcluded(myCal2, true);
            // 注册Calendar replace,updateTriggers  
            // 如果updateTriggers为true,Scheduler中已引用Calendar的Trigger将得到更新。 true覆盖  立即执行
            scheduler.addCalendar("calendar1", cal, true, true);
            // 和触发器进行关联
            trigger.setCalendarName("calendar1");

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}






















1 0
原创粉丝点击