• Quartz 使用


    package s.simple;
    import org.quartz.*;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    /**
     * @Title: HelloJob
     * @ProjectName quartz
     * @date 2019/6/2513:52
     * 实现任务逻辑的接口Job
     */
    public class HelloJob implements Job {
        private String testParam;
    
        public void setTestParam(String testParam) {
            this.testParam = testParam;
        }
    
        @Override
        public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
            Date date = new Date();
            SimpleDateFormat sfd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String format = sfd.format(date);
            System.out.println("当前系统时间: "+ format);
    
            // 值获取2种方式
            // 1.获取jobDetailMap 和 TriggerDataMap
            JobDataMap jobDataMap = jobExecutionContext.getTrigger().getJobDataMap();
            JobDataMap jobDataMap1 = jobExecutionContext.getJobDetail().getJobDataMap();
            // 合并后的Map Trgger会覆盖Detail中的key
            JobDataMap mergedJobDataMap = jobExecutionContext.getMergedJobDataMap();
            String message1 = mergedJobDataMap.getString("message");
            // 2.传值方式也可以通过属性方式,需要定义set方法
            System.out.println(testParam);
    
            // 获取开始和结束时间
            Trigger trigger = jobExecutionContext.getTrigger();
            Date startTime = trigger.getStartTime();
            String s_time = sfd.format(startTime);
            System.out.println("开始时间:"+startTime);
            Date endTime = trigger.getEndTime();
            System.out.println("结束时间:"+sfd.format(endTime));
    
    
        }
    }
    

     

    Scheduler
    package s.simple;
    
    import org.quartz.*;
    import org.quartz.impl.StdSchedulerFactory;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    /**
     * @Title: HelloScheduler
     * @ProjectName quartz
     * @date 2019/6/2513:58
     */
    public class HelloScheduler {
        public static void main(String[] args) {
            JobDataMap jobDataMap = new JobDataMap();
            jobDataMap.put("testParam","JobDetail");
            JobDataMap jobDataMap2 = new JobDataMap();
            jobDataMap2.put("message","Trigger");
            // 打印当前时间
            Date date = new Date();
            Date date2 = new Date();
            Date endDate = new Date();
            SimpleDateFormat sfd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String format = sfd.format(date);
            System.out.println("current exec time is "+ format);
            date.setTime(date.getTime()+3000);  // 当前时间3秒
            date2.setTime(date2.getTime()+4000);  // 当前时间4秒
            endDate.setTime(endDate.getTime()+6000);  // 当前时间6秒后停止
            // 创建jobDetail 并绑定helloJob
            JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob", "group1").usingJobData(jobDataMap).build();
            /**
             * Trigger作用是执行Job,告诉调度程序什么时候触发
             * 创建Trigger 立即执行,并每隔2秒执行,重复永远
                Trigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1")
                        .usingJobData(jobDataMap2)
                        .startAt(date).endAt(endDate) // 开始时间和结束时间
                        .withSchedule(SimpleScheduleBuilder
                        .simpleSchedule()
                        .withIntervalInSeconds(2)
                        .repeatForever())
                        .build();
             */
            /**
             * SimpleTrigger
             * 距离当前时间4秒后首次执行,之后每两秒重复执行一次
            SimpleTrigger trigger = TriggerBuilder
                         .newTrigger()
                         .withIdentity("myTrigger", "group1")
                            .usingJobData(jobDataMap2)
                            .startAt(date2) // 4秒后开始时间
                            .withSchedule(SimpleScheduleBuilder
                            .simpleSchedule()
                            .withIntervalInSeconds(2)  // 重复间隔
                            .withRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY)) // 重复次数
                    .build();
            */
            /**
             * CronTrigger 使用
             *  1. (* * * * * ? *) 每秒触发一次
             *  2. (* 15 10 ? * * 2017)  2017年每天10.15触发一次
             */
            CronTrigger trigger = TriggerBuilder
                    .newTrigger()
                    .withIdentity("myTrigger", "group1")
                    .usingJobData(jobDataMap2)
                    .withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ? *"))
                    .build();
            // 创建Scheduler示例
            SchedulerFactory schedulerFactory = new StdSchedulerFactory();
            try {
                Scheduler scheduler = schedulerFactory.getScheduler();
                scheduler.scheduleJob(jobDetail, trigger);
                scheduler.start();
            } catch (SchedulerException e) {
                e.printStackTrace();
            }
    
    
        }
    }
    

      

  • 相关阅读:
    推荐一款酷炫闪烁的告警按钮
    设计模式之单例模式(懒汉式单例、饿汉式单例、登记式单例)
    JDK1.8新特性-Lambda表达式
    博客园自定义样式(去广告、公告栏加头像、按钮样式)
    java月考题JSD1908第二次月考(含答案和解析)
    Java面试题_第四阶段
    Java面试题_第三阶段(Spring、MVC、IOC、AOP、DI、MyBatis、SSM、struts2)
    Java面试题_第二阶段(Servlet、HTTP、Session、JSP、 Ajax、Filter、JDBC、Mysql、Spring)
    Java面试题_第一阶段(static、final、面向对象、多线程、集合、String、同步、接口、GC、JVM)
    Oracle排名函数(Rank)实例详解
  • 原文地址:https://www.cnblogs.com/412013cl/p/11084353.html
Copyright © 2020-2023  润新知