Quartz(08) quartz spring web 项目的整合(方法二)

来源:互联网 发布:北航软件工程硕士学费 编辑:程序博客网 时间:2024/04/27 02:04

上一章中使用了MethodInvokingJobDetailFactoryBean 来配置我们自定义的job,缺点是这样的job不能持久化.本文我们采用JobDetailFactoryBean 来注册job

.源码下载地址

applicationContext.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:aop="http://www.springframework.org/schema/aop"    xmlns:tx="http://www.springframework.org/schema/tx"    xsi:schemaLocation="            http://www.springframework.org/schema/beans             http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">     <!-- 配置Quartz的两种方式 -->     <!-- 1.使用 MethodInvokingJobDetailFactoryBean 来注册jobDetail -->     <!-- 2.使用JobDetailFactoryBean 来注册jobDetail -->     <!-- 二者之间的区别.使用方法1,自定义的job类是普通的类不需实现job接口,而且targetMethod必须是无参的方法.使用方便,但是job无法持久化(JobStoreTX) -->     <!-- 二者之间的区别.使用方法2,自定义的job类需实现job接口 使用复杂些但是job可以持久化(JobStoreTX)-->     <!-- 本例采用第2种方式 ,quartz06使用使用第一种方式配置.实现job持久化的配置在quartz08中实现-->    <!-- com.quartz.job.Q1,com.quartz.job.Q2 都实现了Job接口 -->    <bean id="myJobDetail1" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">        <property name="jobClass" value="com.quartz.job.Q1"></property>        <property name="durability" value="true"/>    </bean>    <bean id="myTrigger1" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">        <property name="name" value="my_job1"/>        <property name="group" value="my_group1"/>        <property name="jobDetail">            <ref bean="myJobDetail1"/>        </property>        <property name="cronExpression">            <value>0/5 * * * * ?</value>        </property>    </bean>    <bean id="myJobDetail2" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">        <property name="jobClass" value="com.quartz.job.Q2"/>        <property name="durability" value="true"/>    </bean>    <bean id="myTrigger2" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">        <property name="name" value="my_job1"/>        <property name="group" value="my_group2"/>        <property name="jobDetail">            <ref bean="myJobDetail2"/>        </property>        <property name="cronExpression">            <value>0/5 * * * * ?</value>        </property>    </bean>    <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">        <property name="triggers">            <list>                <ref bean="myTrigger1"/>                <ref bean="myTrigger2"/>            </list>        </property>    </bean></beans>

实现了com.quartz.job接口的Q1,Q2

package com.quartz.job;import java.io.Serializable;import java.text.SimpleDateFormat;import java.util.Date;import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;public class Q1 implements Serializable, Job {    private static final long serialVersionUID = 6890216263057956690L;    public void execute(JobExecutionContext arg0) throws JobExecutionException {        System.out.println("------------------------");        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd hh:mm:ss");        System.out.println(sdf.format(new Date()));        System.out.println("------------------------");    }}
package com.quartz.job;import java.io.Serializable;import java.text.SimpleDateFormat;import java.util.Date;import org.quartz.Job;import org.quartz.JobExecutionContext;public class Q2 implements Serializable, Job {    private static final long serialVersionUID = 5004730246347558783L;    public void execute(JobExecutionContext arg0) {        System.out.println("************************");        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd hh:mm:ss");        System.out.println(sdf.format(new Date()));        System.out.println("************************");    }}

quarty.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=falseorg.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPoolorg.quartz.threadPool.threadCount=10org.quartz.threadPool.threadPriority=5org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true#jobStoreTX TESTorg.quartz.jobStore.misfireThreshold=60000# TX methodorg.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX#jdbc Delegateorg.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate#table prefixorg.quartz.jobStore.tablePrefix=qrtz_#org.quartz.jobStore.dataSource=myDSorg.quartz.dataSource.myDS.driver=com.mysql.jdbc.Driver   org.quartz.dataSource.myDS.URL=jdbc:mysql://localhost:3306/testorg.quartz.dataSource.myDS.user=root   org.quartz.dataSource.myDS.password=123456   org.quartz.dataSource.myDS.maxConnections=10

这样就是配置好了,启动web项目,发现数据库中已经对我们的任务进行了持久化. 注意点,1.使用JobDetailFactoryBean 注册的job必须实现了com.quartz.job接口

0 0
原创粉丝点击