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

x33g5p2x  于2021-12-21 转载在 其他  
字(5.2k)|赞(0)|评价(0)|浏览(499)

上一章(Quartz(07) quartz spring web 项目的整合(方法一))中使用了MethodInvokingJobDetailFactoryBean 来配置我们自定义的job,缺点是这样的job不能持久化.本文我们采用JobDetailFactoryBean 来注册job

.源码下载地址

applicationContext.xml 文件如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <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">
  3. <!-- 配置Quartz的两种方式 -->
  4. <!-- 1.使用 MethodInvokingJobDetailFactoryBean 来注册jobDetail -->
  5. <!-- 2.使用JobDetailFactoryBean 来注册jobDetail -->
  6. <!-- 二者之间的区别.使用方法1,自定义的job类是普通的类不需实现job接口,而且targetMethod必须是无参的方法.使用方便,但是job无法持久化(JobStoreTX) -->
  7. <!-- 二者之间的区别.使用方法2,自定义的job类需实现job接口 使用复杂些但是job可以持久化(JobStoreTX)-->
  8. <!-- 本例采用第2种方式 ,quartz06使用使用第一种方式配置.实现job持久化的配置在quartz08中实现-->
  9. <!-- com.quartz.job.Q1,com.quartz.job.Q2 都实现了Job接口 -->
  10. <bean id="myJobDetail1" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
  11. <property name="jobClass" value="com.quartz.job.Q1"></property>
  12. <property name="durability" value="true"/>
  13. </bean>
  14. <bean id="myTrigger1" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
  15. <property name="name" value="my_job1"/>
  16. <property name="group" value="my_group1"/>
  17. <property name="jobDetail">
  18. <ref bean="myJobDetail1"/>
  19. </property>
  20. <property name="cronExpression">
  21. <value>0/5 * * * * ?</value>
  22. </property>
  23. </bean>
  24. <bean id="myJobDetail2" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
  25. <property name="jobClass" value="com.quartz.job.Q2"/>
  26. <property name="durability" value="true"/>
  27. </bean>
  28. <bean id="myTrigger2" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
  29. <property name="name" value="my_job1"/>
  30. <property name="group" value="my_group2"/>
  31. <property name="jobDetail">
  32. <ref bean="myJobDetail2"/>
  33. </property>
  34. <property name="cronExpression">
  35. <value>0/5 * * * * ?</value>
  36. </property>
  37. </bean>
  38. <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
  39. <property name="triggers">
  40. <list>
  41. <ref bean="myTrigger1"/>
  42. <ref bean="myTrigger2"/>
  43. </list>
  44. </property>
  45. </bean>
  46. </beans>

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

  1. package com.quartz.job;
  2. import java.io.Serializable;
  3. import java.text.SimpleDateFormat;
  4. import java.util.Date;
  5. import org.quartz.Job;
  6. import org.quartz.JobExecutionContext;
  7. import org.quartz.JobExecutionException;
  8. public class Q1 implements Serializable, Job {
  9. private static final long serialVersionUID = 6890216263057956690L;
  10. public void execute(JobExecutionContext arg0) throws JobExecutionException {
  11. System.out.println("------------------------");
  12. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd hh:mm:ss");
  13. System.out.println(sdf.format(new Date()));
  14. System.out.println("------------------------");
  15. }
  16. }
  1. package com.quartz.job;
  2. import java.io.Serializable;
  3. import java.text.SimpleDateFormat;
  4. import java.util.Date;
  5. import org.quartz.Job;
  6. import org.quartz.JobExecutionContext;
  7. public class Q2 implements Serializable, Job {
  8. private static final long serialVersionUID = 5004730246347558783L;
  9. public void execute(JobExecutionContext arg0) {
  10. System.out.println("************************");
  11. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd hh:mm:ss");
  12. System.out.println(sdf.format(new Date()));
  13. System.out.println("************************");
  14. }
  15. }

quarty.properties 的配置如下

  1. # Default Properties file for use by StdSchedulerFactory
  2. # to create a Quartz Scheduler Instance, if a different
  3. # properties file is not explicitly specified.
  4. #
  5. org.quartz.scheduler.instanceName=DefaultQuartzScheduler
  6. org.quartz.scheduler.rmi.export=false
  7. org.quartz.scheduler.rmi.proxy=false
  8. org.quartz.scheduler.wrapJobExecutionInUserTransaction=false
  9. org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
  10. org.quartz.threadPool.threadCount=10
  11. org.quartz.threadPool.threadPriority=5
  12. org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true
  13. #jobStoreTX TEST
  14. org.quartz.jobStore.misfireThreshold=60000
  15. # TX method
  16. org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
  17. #jdbc Delegate
  18. org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
  19. #table prefix
  20. org.quartz.jobStore.tablePrefix=qrtz_
  21. #
  22. org.quartz.jobStore.dataSource=myDS
  23. org.quartz.dataSource.myDS.driver=com.mysql.jdbc.Driver
  24. org.quartz.dataSource.myDS.URL=jdbc:mysql://localhost:3306/test
  25. org.quartz.dataSource.myDS.user=root
  26. org.quartz.dataSource.myDS.password=123456
  27. org.quartz.dataSource.myDS.maxConnections=10

这样就是配置好了,启动web项目,发现数据库中已经对我们的任务进行了持久化. 注意点,1.使用JobDetailFactoryBean 注册的job必须实现了com.quartz.job接口
下一节:Quartz(09) quartz spring web 项目的整合(终极版)

相关文章