Spring Quartz2 动态任务的实例详解
此处使用的是Quartz中SimpleScheduleBuilder类,非CronScheduleBuilder,CronScheduleBuilder是Cron表达式的。具体请自行百度。
实现代码:
/** * 新增任务 * @param scheduleJob * @throws Exception */ @Override @SuppressWarnings("unchecked") public void addJobSimple(ScheduleJob scheduleJob) throws Exception{ TriggerKey triggerKey = TriggerKey.triggerKey(scheduleJob.getJobName(), scheduleJob.getJobGroup()); //任务触发 Trigger trigger = scheduler.getTrigger(triggerKey); if (null == trigger) { JobDetail jobDetail = JobBuilder.newJob((Class<? extends Job>) Class.forName(scheduleJob.getClazz())) .withIdentity(scheduleJob.getJobName(), scheduleJob.getJobGroup()).build(); jobDetail.getJobDataMap().put("scheduleJob", scheduleJob); SimpleScheduleBuilder simpleScheduleBuilder = SimpleScheduleBuilder.simpleSchedule(); if("秒".equals(scheduleJob.getTimeType()) || "second".equalsIgnoreCase(scheduleJob.getTimeType())){ simpleScheduleBuilder.withIntervalInSeconds(scheduleJob.getTimeValue()).repeatForever(); }else if("分".equals(scheduleJob.getTimeType()) || "分钟".equals(scheduleJob.getTimeType()) || "minute".equalsIgnoreCase(scheduleJob.getTimeType())){ simpleScheduleBuilder.withIntervalInMinutes(scheduleJob.getTimeValue()).repeatForever(); }else if("时".equals(scheduleJob.getTimeType()) || "小时".equals(scheduleJob.getTimeType()) || "hour".equalsIgnoreCase(scheduleJob.getTimeType())){ simpleScheduleBuilder.withIntervalInHours(scheduleJob.getTimeValue()).repeatForever(); }else if("天".equals(scheduleJob.getTimeType()) || "date".equalsIgnoreCase(scheduleJob.getTimeType())){ simpleScheduleBuilder.withIntervalInHours(scheduleJob.getTimeValue()).repeatForever(); } ScheduleBuilder<SimpleTrigger> schedBuilder = simpleScheduleBuilder.withMisfireHandlingInstructionNextWithRemainingCount(); trigger =TriggerBuilder.newTrigger().withIdentity(scheduleJob.getJobName(), scheduleJob.getJobGroup()) .withSchedule(schedBuilder).build(); trigger = TriggerBuilder.newTrigger().withIdentity(scheduleJob.getJobName(), scheduleJob.getJobGroup()).withSchedule(schedBuilder).build(); scheduler.scheduleJob(jobDetail, trigger); log.info(CC.LOG_PREFIX + "新增简单任务:"+JasonUtils.Object2String(scheduleJob)); }else { this.updateJobCron(scheduleJob); } }
需要注意是的,当定时任务只执行一次时,就要仔细看代码,如上面的简单定时任务,刚开始是我这样的:
simpleScheduleBuilder.withIntervalInSeconds(scheduleJob.getTimeValue());
结果只执行一次,而我需要的是不断循环执行,最后改成:
simpleScheduleBuilder.withIntervalInSeconds(scheduleJob.getTimeValue()).repeatForever();
可以看出,后面多了个:repeatForever(),表示永远重复。
如果是希望执行多少次后不执行,就使用:.withRepeatCount(triggerRepeatCount),如下:
simpleScheduleBuilder.withIntervalInHours(scheduleJob.getTimeValue()).withRepeatCount(triggerRepeatCount);
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
本文向大家介绍Mybatis动态SQL实例详解,包括了Mybatis动态SQL实例详解的使用技巧和注意事项,需要的朋友参考一下 动态SQL 什么是动态SQL? MyBatis的官方文档中是这样介绍的? 动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列
本文向大家介绍Android AsyncTack 异步任务实例详解,包括了Android AsyncTack 异步任务实例详解的使用技巧和注意事项,需要的朋友参考一下 Android AsyncTack 异步任务 这里写一个小实例,来学习巩固Android AsyncTack 异步任务的知识,以便在项目中使用。 介绍一下如何使用 1, 继承AsyncTask publi
本文向大家介绍springboot动态定时任务的实现方法示例,包括了springboot动态定时任务的实现方法示例的使用技巧和注意事项,需要的朋友参考一下 1、maven引入quartz包 2、创建定时任务工厂类 3、创建定时任务抽象类 4、创建定时任务业务实现类 这里可以写你的业务代码,实现具体的业务逻辑。 5、创建定时任务管理器 包括项目启动时添加定时任务,手动添加定时任务,更新定时任务,删除
本文向大家介绍Spring计划任务用法实例详解,包括了Spring计划任务用法实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Spring计划任务用法。分享给大家供大家参考,具体如下: 一 点睛 从Spring3.1开始,计划任务在Spring中的实现变得异常的简单。只需要下面两步。 1 通过在配置类上注解@EnableScheduling来开启对计划任务的支持。 2 在要执行计划
本文向大家介绍Linux静态库与动态库实例详解,包括了Linux静态库与动态库实例详解的使用技巧和注意事项,需要的朋友参考一下 Linux静态库与动态库实例详解 1. Linux 下静态链接库编译与使用 首先编写如下代码: 然后编译: 1. gcc -c test.c //生成目标文件 2. ar crv libtest.a test.o //生成静态链接库libtest.a 3. g++ -o
本文向大家介绍实例详解BootStrap的动态模态框及静态模态框,包括了实例详解BootStrap的动态模态框及静态模态框的使用技巧和注意事项,需要的朋友参考一下 1.要用bootStrap这个框架就必须要重载它的class类,也就是说class要一样 代码如下: 有疑问的可以在下面留言,欢迎大家一起交流 1.1动态模态框 1.2静态模态框 总结 以上所述是小编给大家介绍的BootStrap的动态
本文向大家介绍JS中的多态实例详解,包括了JS中的多态实例详解的使用技巧和注意事项,需要的朋友参考一下 多态在面向对象编程语言中是十分重要的。在JAVA中是通过继承来得到多态的效果。如下: 多态的思想实际上是把“做什么”和“谁去做”分离开来,要实现这一点,归根结底先要消除类型之间的耦合关系。 在Java中,可以通过向上转型来实现多态。而javascript的变量在运行期是可变的,一个js对象既可
本文向大家介绍vue动态注册组件实例代码详解,包括了vue动态注册组件实例代码详解的使用技巧和注意事项,需要的朋友参考一下 写本篇文章之前其实也关注过vue中的一个关于加载动态组件is的API,最开始研究它只是用来实现一个tab切换的功能,使用起来也蛮不错的。 is 预期:string | Object (组件的选项对象) 用于动态组件且基于 DOM 内模板的限制来工作。 示例: 详见vue AP