任务调度quartz(一)quartz在spring中的集成
2015-12-23 21:52
507 查看
对于定时器想必大家都应该挺清楚,就像闹钟一样,在某个指定的时间点定时执行。在Java中我们可以使用quartz来定时调度自己的任务,这个框架为我们提供很多比较方便的功能,能够很轻易对我们的任务进行启动、暂停以及运行周期的修改。
任务调度的意义还是挺大的,例如我们可以写一个调度平台来管理和监控自己写的任务,而在这些任务中我们可以写自己想要干的事,比如做个生日提醒啊,只要发现当前是谁的生日,就给自己发个短信或邮件。或者在项目中完成一些特定的数据处理等。这个笔者会在下一篇博客中讲到。
接下来,直入正题。
TestJob.java:
TestJob2.java:
然后,再来看看在spring中的配置:
spring-timer.xml:
这里,我们可以配置web容器启动后自动调度程序,也可以手动进行启动和暂停。
然后,再来看看springMVC中接受请求的代码:
启动后,控制台的输出如下图:
点击暂停后,也可以停止此任务。
好了,就先简单的讲到这儿了,希望对想使用quartz的童鞋有所帮助!
任务调度的意义还是挺大的,例如我们可以写一个调度平台来管理和监控自己写的任务,而在这些任务中我们可以写自己想要干的事,比如做个生日提醒啊,只要发现当前是谁的生日,就给自己发个短信或邮件。或者在项目中完成一些特定的数据处理等。这个笔者会在下一篇博客中讲到。
接下来,直入正题。
一、所依赖的jar包
一是会依赖spring相关的包,而是会依赖quartz的包,spring已经对quartz提供了支持。<!-- quartz任务调度 --> <dependency> <groupId>fakepath</groupId> <artifactId>quartz-all</artifactId> <version>2.1.6</version> </dependency> <dependency> <groupId>fakepath</groupId> <artifactId>quartz-commonj</artifactId> <version>2.1.6</version> </dependency>
二、spring的中配置
首先准备两个测试任务类,如下TestJob.java:
package org.qiyongkang.schedule.quartz.job; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; /** * ClassName:TestJob <br/> * Function: TODO ADD FUNCTION. <br/> * Reason: TODO ADD REASON. <br/> * Date: 2015年12月18日 下午4:37:12 <br/> * @author qiyongkang * @version * @since JDK 1.6 * @see */ public class TestJob { private Logger logger = LogManager.getLogger(TestJob.class.getName()); public void execute() { //获取当前时间 Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); logger.info("当前时间:{}", sdf.format(date)); } }
TestJob2.java:
import java.text.SimpleDateFormat; import java.util.Date; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; /** * ClassName:TestJob2 <br/> * Function: TODO ADD FUNCTION. <br/> * Reason: TODO ADD REASON. <br/> * Date: 2015年12月21日 下午7:52:27 <br/> * @author qiyongkang * @version * @since JDK 1.6 * @see */ public class TestJob2 { private Logger logger = LogManager.getLogger(TestJob2.class.getName()); public void execute() { //获取当前时间 Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); logger.info("当前时间:{}", sdf.format(date)); } }
然后,再来看看在spring中的配置:
spring-timer.xml:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation=" http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <!-- Scheduler的配置 --> <bean name="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <!-- <property name="triggers"> <list> <ref bean="testTrigger"/> <ref bean="testTrigger2"/> </list> </property> --> <property name="autoStartup" value="false"/> <!-- 默认为true --> </bean> <!-- Trigger的配置,指定job执行的时间周期 --> <bean id="testTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail" ref="testJobDetail"/> <property name="cronExpression" value="*/5 * * * * ?"/><!-- 每隔5秒钟触发一次 --> </bean> <bean id="testTrigger2" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail" ref="testJobDetail2"/> <property name="cronExpression" value="*/1 * * * * ?"/><!-- 每隔1秒钟触发一次 --> </bean> <!-- JobDetail的配置,指定job的执行类和执行方法 --> <bean id="testJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="testJob"/> <property name="targetMethod" value="execute"/> <property name="concurrent" value="true"/> <!-- 是否允许任务并发执行。当值为false时,表示必须等到前一个线程处理完毕后才再启一个新的线程 --> </bean> <bean id="testJobDetail2" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="testJob2"/> <property name="targetMethod" value="execute"/> <property name="concurrent" value="true"/> </bean> <!-- 业务类的配置 --> <bean id="testJob" class="org.qiyongkang.schedule.quartz.job.TestJob"/> <bean id="testJob2" class="org.qiyongkang.schedule.quartz.job.TestJob2"/> </beans>
这里,我们可以配置web容器启动后自动调度程序,也可以手动进行启动和暂停。
三、启动和暂停
这里,笔者简单的写了这个页面来控制这两个任务的启动和暂停,如下:然后,再来看看springMVC中接受请求的代码:
/** * * operateTask:任务的启动或停止. <br/> * * @author qiyongkang * @param taskName * @param flag:0->启动,1->停止 * @return * @since JDK 1.6 */ @RequestMapping @ResponseBody public ExtJsObject operateTask(String triggerName, String jobDetailName, Integer flag) { ExtJsObject extJsObject = null; Scheduler scheduler = startQuertz.getScheduler(); //获取CronTrigger CronTrigger cronTrigger = SpringUtil.getBean(triggerName); //获取jobDetail JobDetail jobDetail = SpringUtil.getBean(jobDetailName); try { if (flag == 0) { //启动此任务 scheduler.scheduleJob(jobDetail, cronTrigger); if (!scheduler.isStarted()) { scheduler.start(); } } else if (flag == 1) { //停止此任务 scheduler.pauseTrigger(cronTrigger.getKey()); scheduler.unscheduleJob(cronTrigger.getKey()); scheduler.deleteJob(jobDetail.getKey()); } } catch (SchedulerException e) { e.printStackTrace(); log.error("触发器启动异常", e); } return extJsObject; }
启动后,控制台的输出如下图:
点击暂停后,也可以停止此任务。
好了,就先简单的讲到这儿了,希望对想使用quartz的童鞋有所帮助!
相关文章推荐
- 使用for循环经典案例输出空心的菱形 in Java
- 关于回调函数理解(Java语言)
- java Io操作分类整理(终于不再迷糊了!!!)
- java集合类说明及区别
- Java Socket编程
- 慕课网 Java遇见html-servlet篇
- JAVA 全排列
- 快速排序(java实现)
- eclipse上运行spark程序
- JAVA面向对象之方法
- 装饰者模式
- Java多线程编程— 概念以及经常使用控制
- 基于注解的Spring MVC的简单入门——简略版
- 安装JDK过程中的一些注意事项
- JAVA与指针
- Java——Java 中新增的 foreach 的用法
- Java 红包算法、限定最小和最大临界值
- 总结java反射相关知识
- mybatis逆向工程
- 集合(List)