quartz配置发布定时任务(二)

来源:互联网 发布:java编程需要哪些软件 编辑:程序博客网 时间:2024/05/16 14:29
  上章(一)介绍定时任务xml配置,虽然可以配置多个定时任务,但是每次修改时间什么的都需要在xml里面改,这样不便于管理。  本章(二)主要实现动态增删改查定时任务,cron时间表达式,定时任务名称,定时器名都是以参数的形式。
  1. 环境jar包,jar包下载:http://download.csdn.net/detail/qq_22860341/9828157
    这里写图片描述
    2..xml配置(我配置在spring-mvc.xml)
<bean name ="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

3.代码实现(定时任务名,组名什么的可以页面设置名称,也可以设置成自增)

    private static SchedulerFactory schedulerFactory = new StdSchedulerFactory();     private Scheduler scheduler;         public void setScheduler(Scheduler scheduler) {            this.scheduler = scheduler;        } /**         * @Description: 添加一个定时任务         *          * @param jobName         *            任务名(可以页面设置名称,也可以设置成自增)         * @param jobGroupName         *            任务组名         * @param triggerName         *            触发器名         * @param triggerGroupName         *            触发器组名         * @param jobClass         *            任务         * @param time         *            时间设置,参考quartz说明文档(cron表达式时间)                 * @param stime         *            定时任务开始时间          *  @param etime         *            定时任务结束时间         */        public static void addJob(String jobName, String jobGroupName,                String triggerName, String triggerGroupName, Class jobClass,                String time,String stime,String etime) {            try {                Scheduler sched = schedulerFactory.getScheduler();                JobDetail jobDetail = new JobDetail(jobName, jobGroupName, jobClass);// 任务名,任务组,任务执行类                // 触发器                CronTrigger trigger = new CronTrigger(triggerName, triggerGroupName);// 触发器名,触发器组                trigger.setCronExpression(time);// 触发器时间设定                if(!"".equals(stime)){                    Date s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(stime);                    trigger.setStartTime(s);                }                if(!"".equals(etime)){                    Date e = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(etime);                    trigger.setStartTime(e);                }                sched.scheduleJob(jobDetail, trigger);                sched.start();            } catch (Exception e) {                throw new RuntimeException(e);            }        }/**         * @Description: 修改一个任务的触发时间         *          * @param triggerName         * @param triggerGroupName         * @param time         */        public static void modifyJobTime(String triggerName,                String triggerGroupName, String time) {            try {                Scheduler sched = schedulerFactory.getScheduler();                CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerName,                        triggerGroupName);                if (trigger == null) {                    return;                }                String oldTime = trigger.getCronExpression();                if (!oldTime.equalsIgnoreCase(time)) {                    CronTrigger ct = (CronTrigger) trigger;                    // 修改时间                    ct.setCronExpression(time);                    // 重启触发器                    sched.rescheduleJob(triggerName, triggerGroupName, trigger);                }            } catch (Exception e) {                throw new RuntimeException(e);            }        }        /**         * @Description: 移除一个任务         *          * @param jobName         * @param jobGroupName         * @param triggerName         * @param triggerGroupName         */        public static void removeJob(String jobName, String jobGroupName,                String triggerName, String triggerGroupName) {            try {                Scheduler sched = schedulerFactory.getScheduler();                sched.pauseTrigger(triggerName, triggerGroupName);// 停止触发器                sched.unscheduleJob(triggerName, triggerGroupName);// 移除触发器                sched.deleteJob(jobName, jobGroupName);// 删除任务            } catch (Exception e) {                throw new RuntimeException(e);            }        }/**         * @Description:启动所有定时任务         */        public static void startJobs() {            try {                Scheduler sched = schedulerFactory.getScheduler();                sched.start();            } catch (Exception e) {                throw new RuntimeException(e);            }        }        /**         * @Description:关闭所有定时任务         */        public static void shutdownJobs() {            try {                Scheduler sched = schedulerFactory.getScheduler();                if (!sched.isShutdown()) {                    sched.shutdown();                }            } catch (Exception e) {                throw new RuntimeException(e);            }        }

4.定时任务执行类,添加定时任务的具体业务类,实现Job类。

public class QuartzJobController implements Job {    @Override    public void execute(JobExecutionContext context) throws JobExecutionException {        CronTrigger trigger = (CronTrigger) context.getTrigger();  //获取当前定时任务的定时器        String jobname = trigger.getJobName();        //具体业务实现    }       }

5,jsp页面参考
可以参考百度cron表达式 http://cron.qqe2.com/ 源码下载地址http://download.csdn.net/detail/qq_22860341/9828074
这里写图片描述

6,本人的定时任务页面,根据上图所来,可以根据它的规则拼接,可以直接用,根据自己喜好和业务。介绍2种:
这里写图片描述
这里写图片描述

7.不懂的地方或者有好建议,有错误的地方欢迎指教QQ2118119173,欢迎打赏
这里写图片描述

1 0
原创粉丝点击