quarzt定时调度任务解析
简介 Quarzt是一个项目中定时执行任务的开源项目,Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用,这里我们介绍和spring整合的例子 因为Spring已经整合Quarzt,所以我们只需要配置一下即可。 下载jar包 可以直接去http://www.quartz-scheduler.org/ Quarzt的官方网站下载jar包 可以通过Maven来构建,记得引入Spring所需要的jar <!-- 引入quartz对应的依赖 --> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.3</version> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz-jobs</artifactId> <version>2.2.3</version> </dependency> 概念 任务类:即需要定时执行代码的类。 JobDetail:配置任务类的细节,即注入任务类和指定任务类的方法,是一个可执行的工作,它本身可能是有状态的。 触发器(myTrigger):触发器代表一个调度参数的配置,配置调用的时间。 调度工厂(scheduler):是一个计划调度器容器,容器里面可以盛放众多的JobDetail和trigger,当容器启动后,里面的每个JobDetail都会根据trigger按部就班自动去执行。 配置方法 首先编写任务类 public class MyJob { public void job() { System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + ": 任务执行"); } } 然后再spring配置任务类的bean <bean id="myJob" class="quarzt.test.MyJob" / > 配置JobDetail,注入任务类和任务类的方法 <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <!-- 注入目标对象 --> <property name="targetObject" ref="myJob"/> <!-- 注入目标方法 --> <property name="targetMethod" value="job"/> </bean> 配置触发器 <!-- 配置触发器 --> <bean id="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <!-- 注入任务详情对象 --> <property name="jobDetail" ref="jobDetail"/> <!-- 注入cron表达式,通过这个表达式指定触发的时间点 --> <property name="cronExpression"> <value>/5 * * * * ?</value> // 表示每隔五秒执行一次。 corn在下面会有活命 </property> </bean> 最后配置调度工厂并且注入配置好的触发器 <!-- 配置调度工厂 --> <bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <!-- 注入触发器 --> <property name="triggers"> <list> <ref bean="myTrigger"/> </list> </property> </bean> 到此就配置完成,可以执行定时任务了。 执行结果 cron表达式 corn用来控制任务的调度时间,在Trigger中配置,下面是corn表达式的基本语法,如果看着太复杂,网上提供了corn语法生成器 http://cron.qqe2.com/ 可以通过指定条件自动生成corn表达式。 下面是七个*所代表的意义 星号:* 代表任意时间,即指示着你想在这个域上包含所有合法的值,
问号(?):? 号只能用在日和周域上,但是不能在这两个域上同时使用。你可以认为 ? 字符是 "我并不关心在该域上是什么值。" 这不同于星号,星号是指示着该域上的每一个值。? 是说不为该域指定值,假如你为这两域的其中一个指定了值,那就必须在另一个字值上放一个 ?。
字母(W):平日 (Mon-Fri),并且仅能用于日域中。它用来指定离指定日的最近的一个平日 井号(#):# 字符仅能用于周域中。它用于指定月份中的第几周的哪一天。例如,如果你指定周域的值为 6#3,它意思是某月的第三个周五 (6=星期五,#3意味着月份中的第三周)。 示例 "0012**?"每天中午12点触发 "01510?**"每天上午10:15触发 "01510**?"每天上午10:15触发 "01510**?*"每天上午10:15触发 "01510**?2005"2005年的每天上午10:15触发 "0*14**?"在每天下午2点到下午2:59期间的每1分钟触发 "00/514**?"在每天下午2点到下午2:55期间的每5分钟触发 "00/514,18**?"在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 "00-514**?"在每天下午2点到下午2:05期间的每1分钟触发 "010,4414?3WED"每年三月的星期三的下午2:10和2:44触发 "01510?*MON-FRI"周一至周五的上午10:15触发 "0151015*?"每月15日上午10:15触发 "01510L*?"每月最后一日的上午10:15触发 "01510?*6L"每月的最后一个星期五上午10:15触发 "01510?*6L2002-2005"2002年至2005年的每月的最后一个星期五上午10:15触发 "01510?*6#3"每月的第三个星期五上午10:15触发 总结 以上就是本文关于quarzt定时调度任务的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题。如有不足之处,欢迎留言指出。感谢朋友们对本站的支持! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- leetcode 763.划分字母区间(Java 贪心)
- java – Kryo crash EnvironmentFailureExceptio
- 那些以“pool”开头的java线程是什么?
- java – 单一来源文档工具
- java – GCM:如何将心跳发送到GCM服务器
- 如何使用CompletionHandlers和小于请求的ByteBuf
- java – 线程安全否定AtomicBoolean get()作为wh
- 详解SpringBoot开发案例之整合定时任务(Schedule
- 在OutOfMemory时生成java转储
- java – 渲染android.support.design.widget.Coo