zoukankan      html  css  js  c++  java
  • Quartz CronTrigger运用

    CronTrigger配置格式:

    格式: [秒] [分] [小时] [日] [月] [周] [年]

     序号 说明
     是否必填  同意填写的值 同意的通配符
     1  秒  是  0-59    , - * /
     2  分  是  0-59
      , - * /
     3 小时  是  0-23   , - * /
     4  日  是  1-31   , - * ? / L W
     5  月  是  1-12 or JAN-DEC   , - * /
     6  周  是  1-7 or SUN-SAT   , - * ? / L #
     7  年  否  empty 或 1970-2099  , - * /

    通配符说明:
    * 表示全部值. 比如:在分的字段上设置 "*",表示每一分钟都会触发。
    ? 表示不指定值。使用的场景为不须要关心当前设置这个字段的值。比如:要在每月的10号触发一个操作,但不关心是周几,所以须要周位置的那个字段设置为"?" 详细设置为 0 0 0 10 * ?
    - 表示区间。比如 在小时上设置 "10-12",表示 10,11,12点都会触发。
    , 表示指定多个值,比如在周字段上设置 "MON,WED,FRI" 表示周一,周三和周五触发
    / 用于递增触发。如在秒上面设置"5/15" 表示从5秒開始,每增15秒触发(5,20,35,50)。 在月字段上设置'1/3'所看到的每月1号開始,每隔三天触发一次。
    L 表示最后的意思。在日字段设置上,表示当月的最后一天(根据当前月份,假设是二月还会根据是否是润年[leap]), 在周字段上表示星期六,相当于"7"或"SAT"。假设在"L"前加上数字,则表示该数据的最后一个。比如在周字段上设置"6L"这种格式,则表示“本 月最后一个星期五"
    W 表示离指定日期的近期那个工作日(周一至周五). 比如在日字段上设置"15W",表示离每月15号近期的那个工作日触发。假设15号正好是周六,则找近期的周五(14号)触发, 假设15号是周未,则找近期的下周一(16号)触发.假设15号正好在工作日(周一至周五),则就在该天触发。假设指定格式为 "1W",它则表示每月1号往后近期的工作日触发。假设1号正是周六,则将在3号下周一触发。(注,"W"前仅仅能设置详细的数字,不同意区间"-").

    小提示

    'L'和 'W'能够一组合使用。假设在日字段上设置"LW",则表示在本月的最后一个工作日触发(一般指发工资

    # 序号(表示每月的第几个周几),比如在周字段上设置"6#3"表示在每月的第三个周六.注意假设指定"#5",正好第五周没有周六,则不会触发该配置(用在母亲节和父亲节再合适只是了)

    小提示

    周字段的设置,若使用英文字母是不区分大写和小写的 MON 与mon同样

    经常使用演示样例:

    0 0 12 * * ? 每天12点触发
    0 15 10 ? * * 每天10点15分触发
    0 15 10 * * ? 每天10点15分触发
    0 15 10 * * ? * 每天10点15分触发
    0 15 10 * * ? 2005 2005年每天10点15分触发
    0 * 14 * * ? 每天下午的 2点到2点59分每分触发
    0 0/5 14 * * ? 每天下午的 2点到2点59分(整点開始,每隔5分触发)
    0 0/5 14,18 * * ? 每天下午的 2点到2点59分(整点開始,每隔5分触发)
    每天下午的 18点到18点59分(整点開始,每隔5分触发)
    0 0-5 14 * * ? 每天下午的 2点到2点05分每分触发
    0 10,44 14 ? 3 WED 3月分每周三下午的 2点10分和2点44分触发
    0 15 10 ? * MON-FRI 从周一到周五每天上午的10点15分触发
    0 15 10 15 * ? 每月15号上午10点15分触发
    0 15 10 L * ? 每月最后一天的10点15分触发
    0 15 10 ? * 6L 每月最后一周的星期五的10点15分触发
    0 15 10 ? * 6L 2002-2005 从2002年到2005年每月最后一周的星期五的10点15分触发
    0 15 10 ? * 6#3 每月的第三周的星期五開始触发
    0 0 12 1/5 * ? 每月的第一个中午開始每隔5天触发一次
    0 11 11 11 11 ? 每年的11月11号 11点11分触发(光棍节)

    演示样例代码:

    DistributeJob 类

    public class DistributeJob implements Job {

        private final Logger logger = Logger.getLogger(DistributeJob.class);

        private Integer sendsucess = 2;

        private User currentUser;

        private IEpgScheduleService epgschedule;

        private INodeDeviceService node;

        public DistributeJob() {
            init();
        }

        private void init() {
            epgschedule = (IEpgScheduleService) SpringBeanUtil.getInstance()
                    .getBean("epgSchduleServiceProxy");
            node = (INodeDeviceService) SpringBeanUtil.getInstance().getBean(
                    "nodeDeviceServiceProxy");
            IProgramTransmitInfoService program = (IProgramTransmitInfoService) SpringBeanUtil
                    .getInstance().getBean("programTransmitServiceProxy");

        }

        public void execute(JobExecutionContext arg0) throws JobExecutionException {
            // TODO Auto-generated method stub
            try {
                logger.info("启动调度工作,開始分发影片...");
                List epgschedults = epgschedule.getEpgScheduleBySendflag(1);
                String distributeAddress = "";
                List nodeControls = node
                        .getDevicesByDeviceType(NodeDeviceType.NODECONTROL);
                for (int i = 0; i < nodeControls.size(); i++) {
                    if (i > 0)
                        distributeAddress += ";";
                    NodeDevice node = (NodeDevice) nodeControls.get(i);
                    distributeAddress += node.getNodeDeviceIpAdress() + ":"
                            + node.getNodeDeviceCmdPort();
                }

                for (Iterator it = epgschedults.iterator(); it.hasNext();) {
                    Epgschedule epg = (Epgschedule) it.next();
                    int videoId = epg.getVideoInfo().getId().intValue();
                    PCCServer pcc = new PCCServer(VodUtil.getLocalHostIP(),
                            MessageDefines.MSG_PCCSERVER_PORT);
                    if (pcc.sendProgramDistributeNotice(videoId, distributeAddress)) {
                        epgschedule.updateEpgScheduleSendflag(epg.getId(),
                                sendsucess);
                        StringBuffer log = new StringBuffer("分发影片 /""
                                + epg.getVideoInfo().getVideoNameCh() + "/"成功");
                        logger.info(log);
                        epgschedule.addLog(currentUser, log);
                    } else {
                        logger.info("分发影片ID /"" + videoId + "/"失败...");
                    }
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            } catch (ServiceException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        public User getCurrentUser() {
            return currentUser;
        }

        public void setCurrentUser(User currentUser) {
            this.currentUser = currentUser;
        }

    }

    QuartzManager类

    public class QuartzManager {

        private static Logger logger=Logger.getLogger(QuartzManager.class);
        private static SchedulerFactory sf = new StdSchedulerFactory();
        private static String JOB_GROUP_NAME = "group1";
        private static String TRIGGER_GROUP_NAME = "trigger1";

        public static void addJob(String jobName, Job job, String time)
                throws SchedulerException, ParseException {

            String cronExpression = "0 0 12 ? * WEB";

            Scheduler sched = sf.getScheduler();
            JobDetail jobDetail = new JobDetail(jobName, JOB_GROUP_NAME, job
                    .getClass());// 任务名,任务组,任务运行类
            // 触发器
            CronTrigger trigger = new CronTrigger(jobName, TRIGGER_GROUP_NAME,
                    cronExpression);// 触发器名,触发器组

            sched.scheduleJob(jobDetail, trigger);
            // 启动
            if (!sched.isShutdown())
                sched.start();
        }

         public static void addJob(String jobName, String jobGroupName,
                String triggerName, String triggerGroupName, Job job, String time)
                throws SchedulerException, ParseException {
            logger.info("启动了"+jobName+"调度器");
            Scheduler sched = sf.getScheduler();
            JobDetail jobDetail = new JobDetail(jobName, jobGroupName, job
                    .getClass());// 任务名,任务组,任务运行类
            // 触发器
            CronTrigger trigger = new CronTrigger(triggerName, triggerGroupName,time);// 触发器名,触发器组
            //trigger.setCronExpression(time);// 触发器时间设定
            sched.scheduleJob(jobDetail, trigger);
            if (!sched.isShutdown())
                sched.start();
        }

         public static void removeJob(String jobName) throws SchedulerException {
            Scheduler sched = sf.getScheduler();
            sched.pauseTrigger(jobName, TRIGGER_GROUP_NAME);// 停止触发器
            sched.unscheduleJob(jobName, TRIGGER_GROUP_NAME);// 移除触发器
            sched.deleteJob(jobName, JOB_GROUP_NAME);// 删除任务
        }
       
        public static void removeJob(String jobName, String jobGroupName,
                String triggerName, String triggerGroupName)
                throws SchedulerException {
            logger.info("移除了"+jobName+"调度器");
            Scheduler sched = sf.getScheduler();
            sched.pauseTrigger(triggerName, triggerGroupName);// 停止触发器
            sched.unscheduleJob(triggerName, triggerGroupName);// 移除触发器
            sched.deleteJob(jobName, jobGroupName);// 删除任务
        }

    }

    调用处:

                // 添加按时间分发影片调度
                DistributeJob disjob = new DistributeJob();
                disjob.setCurrentUser(getCurrentUser(request));
                StringBuffer cronExpression = new StringBuffer();         
                String[] times = transmitTime.split(":");
                cronExpression.append(times[2] + " " + times[1] + " " + times[0]
                        + " * * ?");
                QuartzManager.addJob(jobName, jobGroupName, triggerName,
                        triggerGroupName, disjob, cronExpression.toString());

  • 相关阅读:
    URAL 2067 Friends and Berries (推理,数学)
    URAL 2070 Interesting Numbers (找规律)
    URAL 2073 Log Files (模拟)
    URAL 2069 Hard Rock (最短路)
    URAL 2068 Game of Nuts (博弈)
    URAL 2066 Simple Expression (水题,暴力)
    URAL 2065 Different Sums (找规律)
    UVa 1640 The Counting Problem (数学,区间计数)
    UVa 1630 Folding (区间DP)
    UVa 1629 Cake slicing (记忆化搜索)
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4303506.html
Copyright © 2011-2022 走看看