zoukankan      html  css  js  c++  java
  • 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();
            }
    
    
        }
    }
    

      

  • 相关阅读:
    非阻塞式NIO 小案例(模拟聊天室)
    网络通信小案例,服务端接收成功要给客户端一个反馈(阻塞式)
    阻塞式网络通信小案例:
    NIO的非阻塞式网络通信
    字符编码
    使用分散(Scatter)与聚集(Gather)来实现文件的复制
    使用通道之间的数据传输(效果,也是实现文件的复制)
    创建直接缓存区完成文件的复制
    C++预处理详解
    C++的学习资源
  • 原文地址:https://www.cnblogs.com/412013cl/p/11084353.html
Copyright © 2011-2022 走看看