Quartz 整合Spring 小试牛刀

来源:互联网 发布:模因 知乎 编辑:程序博客网 时间:2024/05/22 14:26

Quartz 是 Opensymphony 组织提供的一个任务调度框架, 具有简单、易用特性的任务调度系统,借助于Cron 表达式,能与spring 进行无缝整合。下面讲一下如何与spring 进行整合:

作业存储:quartz 提供两种作业存储方式:

RAMJobStore: 基于内存来持久化调度程序信息, 这种作业存储类型最容易配置和运行,而且对于大多数应用来说已经够用了。 然而,由于调度程序信息保存在JVM的内存中,因此,一旦应用程序中止,那么所有的调度信息将被丢失。

JDBC作业存储:基于JDBC的作业存储,配置相对麻烦,需要使用JDBC驱动程序和后台数据库保存调度程序的信息,由需要调度程序维护调度信息的用户来设计。


1.  添加相关jar 包:  quartz-2.2.1.jar

2.  创建普通java 任务类:

public class MyJob {public void  printNow(){System.out.println("Now time is : " + MyDateUtils.dateToString(new Date()));}}

2.  spring-quartz.xml 文件配置:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"<span style="white-space:pre"></span>xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<span style="white-space:pre"></span>xmlns:aop="http://www.springframework.org/schema/aop"<span style="white-space:pre"></span>xmlns:tx="http://www.springframework.org/schema/tx"<span style="white-space:pre"></span>xmlns:context="http://www.springframework.org/schema/context"<span style="white-space:pre"></span>xsi:schemaLocation="       http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd       http://www.springframework.org/schema/tx        http://www.springframework.org/schema/tx/spring-tx-4.0.xsd       http://www.springframework.org/schema/context       http://www.springframework.org/schema/context/spring-context-4.0.xsd       http://www.springframework.org/schema/aop       http://www.springframework.org/schema/aop/spring-aop-4.0.xsd"><span style="white-space:pre"></span><span style="white-space:pre"></span><!-- 监听spring 注入生成bean 信息 --><span style="white-space:pre"></span><bean class="org.mirror.shop.listener.SpringInitBeansListner"></bean><span style="white-space:pre"></span><span style="white-space:pre"></span><!-- bean -->    <bean id="myJob" class="org.mirror.shop.job.MyJob" />     <!-- 定义调用对象和调用对象的方法 -->    <bean id="myJobDetail"  class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">        <!-- 调用的类 -->        <property name="targetObject" ref="myJob" />        <!-- 调用类中的方法 -->        <property name="targetMethod" value="printNow" />        <!-- 是否允许任务并发执行。当值为false时,表示必须等到前一个线程处理完毕后才再启一个新的线程 -->        <property name="concurrent" value="false"/>    </bean><span style="white-space:pre"></span><span style="white-space:pre"></span><span style="white-space:pre"></span><!-- 定义触发器管理bean -->    <bean id="cronTriggerPunch" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">        <!-- 要管理的bean,可以为多个 -->        <property name="jobDetail">            <ref bean="myJobDetail" />        </property>        <!-- 执行时间表达式   每5秒中执行一次-->        <property name="cronExpression">            <value>0/5 * * * * ?</value>        </property>    </bean>         <!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序  -->    <!-- 如果lazy-init='true',则需要实例化该bean才能执行调度程序 -->    <bean name="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">        <property name="triggers">            <list>                <ref bean="cronTriggerPunch" />            </list>        </property>        <!-- <property name="autoStartup" value="true"/>  -->    </bean><span style="white-space:pre"></span><span style="white-space:pre"></span></beans>


3. 如果需要修改 quartz 框架的属性值, 可以在 classpath 下添加一个  quartz.properties 属性文件, 项目会自动加载的

# Default Properties file for use by StdSchedulerFactory# to create a Quartz Scheduler Instance, if a different# properties file is not explicitly specified.##调度器名称,无关紧要org.quartz.scheduler.instanceName: DefaultQuartzSchedulerorg.quartz.scheduler.rmi.export: falseorg.quartz.scheduler.rmi.proxy: falseorg.quartz.scheduler.wrapJobExecutionInUserTransaction: false#配置线程实现类org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool#配置线程池的数量org.quartz.threadPool.threadCount: 15#配置线程池里线程的优先级org.quartz.threadPool.threadPriority: 5org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true#配置作业存储#相当于扫描频率,如果系统基于秒级,应培植成1000,quartz默认为分级(60000)org.quartz.jobStore.misfireThreshold: 60000org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore


这样进行配置以后, 当应用成功启动以后,就会每 5 秒执行一次 printNow () 方法, 整合spring 就是这么简单。

打印结果:

Now time is : 2015-05-05 15:50:40Now time is : 2015-05-05 15:50:45Now time is : 2015-05-05 15:50:50Now time is : 2015-05-05 15:50:55Now time is : 2015-05-05 15:51:00





0 0
原创粉丝点击