欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Spring + Quartz 做简单的任务调度,springquartz,本文的示例代码简单的演示

来源: javaer 分享于  点击 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 更详尽的任务安排 线程的内部数据交换
相关栏目:

用户点评