Spring + Quartz 做简单的任务调度,springquartz,本文的示例代码简单的演示
分享于 点击 10360 次 点评:57
Spring + Quartz 做简单的任务调度,springquartz,本文的示例代码简单的演示
本文的示例代码简单的演示如何使用Spring 3.0 + Quartz实现简单的任务调度。
首先需要新建一个maven项目,然后在pom中添加如下依赖项:
<!-- Spring 3 dependencies --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>3.1.2.RELEASE</version> </dependency> <!-- QuartzJobBean in spring-context-support.jar --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>3.1.2.RELEASE</version> </dependency> <!-- Spring + Quartz 事务支持 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>3.1.2.RELEASE</version> </dependency> <!-- Quartz 框架 --> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>1.8.6</version> </dependency>
然后新建一个调度任务要做事情的类,我们命名为“ExampleQuartzTask”,这个类每次都打印一下当前的时间
package cn.outofmemory.hello.quartz;import java.text.SimpleDateFormat;import java.util.Date;public class ExampleQuartzTask { public void doTask() { SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss"); Date now = new Date(); String strNow = format.format(now); String msg = String.format("do Quartz Task at %s", strNow); System.out.println(msg); }}
使用spring和Quartz框架我们只需要实现这个类就可以实现任务的定时调度执行了,剩下的工作就是配置一下spring的配置文件:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <!-- 我们实现的调度任务执行操作类 --> <bean id="exampleQuartzTask" class="cn.outofmemory.hello.quartz.ExampleQuartzTask"/> <!-- 封装要执行操作的类 --> <bean id="exampleQuartzTaskFactoryBean" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="exampleQuartzTask" /> <property name="targetMethod" value="doTask" /> </bean> <!-- 简单触发器,每隔5秒执行一次任务 --> <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <property name="jobDetail" ref="exampleQuartzTaskFactoryBean" /> <property name="repeatInterval" value="5000" /> <property name="startDelay" value="1000" /> </bean> <!-- crontab trigger --> <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="exampleQuartzTaskFactoryBean" /> <!-- 每5秒执行一次 --> <property name="cronExpression" value="0/5 * * * * ?" /> </bean> <!-- 配置任务和触发器 --> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="jobDetails"> <list> <ref bean="exampleQuartzTaskFactoryBean" /> </list> </property> <property name="triggers"> <list> <ref bean="simpleTrigger" /> </list> </property> </bean></beans>
通过上面的配置,我们就可以实现调度任务了,打开App.java类,添加如下代码:
package cn.outofmemory.hello.quartz;import org.springframework.context.support.ClassPathXmlApplicationContext;/** * Hello world! * */public class App { public static void main( String[] args ) { System.out.println( "Hello World!" ); new ClassPathXmlApplicationContext("/springContext.xml"); }}
然后执行程序,就会每隔5秒输出一下当前的时间了,如下输出样例:
Hello World!2013-8-26 21:44:01 org.springframework.context.support.AbstractApplicationContext prepareRefresh信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@89fbe3: startup date [Mon Aug 26 21:44:01 CST 2013]; root of context hierarchy2013-8-26 21:44:01 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions信息: Loading XML bean definitions from class path resource [springContext.xml]2013-8-26 21:44:01 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@2a4983: defining beans [exampleQuartzTask,exampleQuartzTaskFactoryBean,simpleTrigger,org.springframework.scheduling.quartz.SchedulerFactoryBean#0]; root of factory hierarchySLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".SLF4J: Defaulting to no-operation (NOP) logger implementationSLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.2013-8-26 21:44:01 org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup start信息: Starting beans in phase 21474836472013-8-26 21:44:01 org.springframework.scheduling.quartz.SchedulerFactoryBean startScheduler信息: Starting Quartz Scheduler nowdo Quartz Task at 21:44:02do Quartz Task at 21:44:07do Quartz Task at 21:44:12
您可以下载本文的源码
本文只是牛刀小试,Quartz还有很多高级特性:
数据库存储 集群支持 数据库持久化任务,trigger trigger 的停止,运行 任务的任意添加 比corntrigger 更详尽的任务安排 线程的内部数据交换
用户点评