首先这个所有的依赖包就不需要多讲了,首先下载Quazrt发布包,解压,运行doc文件夹下(E:\Quartz\quartz-2.2.3\docs\dbTables)的tables_mysql_innodb.sql脚本 
新建job 
//MyJob 普通job,这个不需要实现org.quartz.Job

Java代码

  1. package job;

  2. import org.slf4j.Logger;

  3. import org.slf4j.LoggerFactory;

  4. public class MyJob {

  5. Logger log = LoggerFactory.getLogger(MyJob.class);

  6. public void work () {

  7. // 此任务仅打印日志便于调试、观察

  8. log.info("==================:"+this.getClass().getName() + " was just triggered...");

  9. }

  10. }

//MyQuartzJob,这个job因为我们要把job持久化到RDB所以要实现org.quartz.Job

Java代码  下载

  1. package job;

  2. import org.quartz.Job;

  3. import org.quartz.JobExecutionContext;

  4. import org.quartz.JobExecutionException;

  5. import org.slf4j.Logger;

  6. import org.slf4j.LoggerFactory;

  7. public class MyQuartzJob implements Job{

  8. Logger log = LoggerFactory.getLogger(MyQuartzJob.class);

  9. @Override

  10. public void execute(JobExecutionContext jobexecutioncontext)

  11. throws JobExecutionException {

  12. log.info("==================:"+this.getClass().getName() + " was just triggered...");

  13. }

  14. }

Spring与Quartz的集成配置 
//SchedulerFactoryBean配置

Java代码  下载

  1. quartz.xml

  2. <?xml version="1.0" encoding="UTF-8"?>

  3. <beans xmlns="http://www.springframework.org/schema/beans"

  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"

  5. xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"

  6. xmlns:mvc="http://www.springframework.org/schema/mvc"

  7. xsi:schemaLocation="http://www.springframework.org/schema/beans

  8. http://www.springframework.org/schema/beans/spring-beans.xsd

  9. http://www.springframework.org/schema/context

  10. http://www.springframework.org/schema/context/spring-context.xsd">

  11. <!-- 调度工厂 -->

  12. <bean id="quartzScheduler"

  13. class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

  14. <property name="dataSource" ref="dataSource" />

  15. <property name="quartzProperties">

  16. <props>

  17. <prop key="org.quartz.scheduler.instanceName">defaultScheduler</prop>

  18. <prop key="org.quartz.scheduler.instanceId">AUTO</prop>

  19. <!-- 线程池配置 -->

  20. <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>

  21. <prop key="org.quartz.threadPool.threadCount">20</prop>

  22. <prop key="org.quartz.threadPool.threadPriority">5</prop>

  23. <!-- JobStore配置 -->

  24. <prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop>

  25. <!-- 集群配置 -->

  26. <prop key="org.quartz.jobStore.isClustered">true</prop>

  27. <prop key="org.quartz.jobStore.clusterCheckinInterval">15000</prop>

  28. <prop key="org.quartz.jobStore.maxMisfiresToHandleAtATime">1</prop>

  29. <prop key="org.quartz.jobStore.misfireThreshold">120000</prop>

  30. <!-- 表名配置 -->

  31. <prop key="org.quartz.jobStore.tablePrefix">QRTZ_</prop>

  32. </props>

  33. </property>

  34. <property name="schedulerName" value="defaultScheduler" />

  35. <!-- 必须的,QuartzScheduler 延时启动,应用启动完后 QuartzScheduler 再启动 -->

  36. <property name="startupDelay" value="30" />

  37. <property name="applicationContextSchedulerContextKey" value="applicationContextKey" />

  38. <!-- 可选,QuartzScheduler 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了 -->

  39. <property name="overwriteExistingJobs" value="true" />

  40. <!-- 设置自动启动 -->

  41. <property name="autoStartup" value="true" />

  42. <!-- 注册触发器 -->

  43. <property name="triggers">

  44. <ref bean="defaultTriggers" />

  45. </property>

  46. <!-- 注册jobDetail -->

  47. <property name="jobDetails">

  48. <ref bean="defaultJobDetails" />

  49. </property>

  50. <!-- 注册监听器 -->

  51. <property name="schedulerListeners">

  52. <ref bean="defaultSchedulerListeners" />

  53. </property>

  54. </bean>

  55. <import resource="quartz-task.xml" />

  56. </beans>

//定时任务配置 
quartz-task.xm

Java代码  下载

  1. <?xml version="1.0" encoding="UTF-8"?>

  2. <beans xmlns="http://www.springframework.org/schema/beans"

  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"

  4. xmlns:util="http://www.springframework.org/schema/util"

  5. xsi:schemaLocation="http://www.springframework.org/schema/beans

  6. http://www.springframework.org/schema/beans/spring-beans.xsd

  7. http://www.springframework.org/schema/util

  8. http://www.springframework.org/schema/util/spring-util.xsd">

  9. <!-- 工作的bean -->

  10. <bean id="myJob" class="job.MyJob" />

  11. <!-- job的配置开始 -->

  12. <bean id="myJobDetail"

  13. class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

  14. <property name="targetObject" ref="myJob" />

  15. <property name="targetMethod" value="work" />

  16. <!-- <property name="concurrent" value="false" /> -->

  17. </bean>

  18. <bean id="myQuartzJobDetail"

  19. class="org.springframework.scheduling.quartz.JobDetailFactoryBean">

  20. <property name="jobClass" value="job.MyQuartzJob" />

  21. <property name="name" value="myQuartzJob" />

  22. <!-- 任务完成之后是否依然保留到数据库,默认false -->

  23. <property name="durability" value="true" />

  24. </bean>

  25. <!-- job的配置结束 -->

  26. <!-- 调度任务配置开始 -->

  27. <bean id="cronTestJobTrigger"

  28. class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">

  29. <property name="jobDetail" ref="myJobDetail" />

  30. <!-- Cron表达式“0/5 * * * * ?”意为:每5秒执行一次。 -->

  31. <property name="cronExpression" value="0/5 * * * * ?" />

  32. </bean>

  33. <bean id="cronTestQuartzJobTrigger"

  34. class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">

  35. <property name="jobDetail" ref="myQuartzJobDetail" />

  36. <property name="cronExpression" value="0/5 * * * * ?" />

  37. </bean>

  38. <!-- 默认调度器(defaultScheduler)触发器配置 -->

  39. <util:list id="defaultTriggers">

  40. <!-- <ref bean="crontestJobTrigger"/> -->

  41. <ref bean="cronTestQuartzJobTrigger" />

  42. </util:list>

  43. <!-- 默认调度器(defaultScheduler)Job实例配置 -->

  44. <util:list id="defaultJobDetails">

  45. </util:list>

  46. <!-- 默认调度器(defaultScheduler)监听器配置 -->

  47. <util:list id="defaultSchedulerListeners">

  48. </util:list>

  49. <!-- JobDetail-配置示例 -->

  50. <!-- <bean id="demoJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">

  51. <property name="jobClass" value="job.MyQuartzJob" />

  52. <property name="jobDataAsMap">

  53. <map>

  54. <entry key="key" value="value" />

  55. </map>

  56. </property>

  57. </bean> -->

  58. </beans>

启动web控制台输出: 下载
信息: Server startup in 11783 ms 
2016-09-09 17:44:00 -32594 [org.springframework.scheduling.quartz.SchedulerFactoryBean] INFO    - Starting Quartz Scheduler now, after delay of 30 seconds 
2016-09-09 17:44:00 -32660 [org.quartz.core.QuartzScheduler] INFO    - Scheduler defaultScheduler_$_donaldHP1473414210553 started. 
2016-09-09 17:44:01 -32758 [job.MyQuartzJob] INFO    - ==================:job.MyQuartzJob was just triggered... 
2016-09-09 17:44:01 -32802 [job.MyQuartzJob] INFO    - ==================:job.MyQuartzJob was just triggered... 
2016-09-09 17:44:01 -32842 [job.MyQuartzJob] INFO    - ==================:job.MyQuartzJob was just triggered... 
查看数据库Quartz,job,trriger相关信息: 
mysql> use test; 
Database changed 
mysql> select * from qrtz_cron_triggers; 
+------------------+--------------------------+---------------+-----------------+---------------+ 
| SCHED_NAME       | TRIGGER_NAME             | TRIGGER_GROUP | CRON_EXPRESSION | TIME_ZONE_ID  | 
+------------------+--------------------------+---------------+-----------------+---------------+ 
| defaultScheduler | cronTestQuartzJobTrigger | DEFAULT       | 0/5 * * * * ?  | Asia/Shanghai | 
+------------------+--------------------------+---------------+-----------------+---------------+ 
1 row in set

mysql> select * from qrtz_fired_triggers; 
+------------------+------------------------------------+--------------------------+---------------+-----------------------+---------------+---------------+----------+----------+----------+-----------+------------------+-------------------+ 
| SCHED_NAME       | ENTRY_ID                           | TRIGGER_NAME             | TRIGGER_GROUP | INSTANCE_NAME         | FIRED_TIME    | SCHED_TIME    | PRIORITY | STATE    | JOB_NAME | JOB_GROUP | IS_NONCONCURRENT | REQUESTS_RECOVERY | 
+------------------+------------------------------------+--------------------------+---------------+-----------------------+---------------+---------------+----------+----------+----------+-----------+------------------+-------------------+ 
| defaultScheduler | donaldHP14734142105531473414210556 | cronTestQuartzJobTrigger | DEFAULT       | donaldHP1473414210553 | 1473414385029 | 1473414390000 |        0 | ACQUIRED | NULL     | NULL      | 0                | 0                 | 
+------------------+------------------------------------+--------------------------+---------------+-----------------------+---------------+---------------+----------+----------+----------+-----------+------------------+-------------------+ 
1 row in set

mysql> select * from qrtz_triggers; 
+------------------+--------------------------+---------------+-------------+-----------+-------------+----------------+----------------+----------+---------------+--------------+---------------+----------+---------------+---------------+----------+ 
| SCHED_NAME       | TRIGGER_NAME             | TRIGGER_GROUP | JOB_NAME    | JOB_GROUP | DESCRIPTION | NEXT_FIRE_TIME | PREV_FIRE_TIME | PRIORITY | TRIGGER_STATE | TRIGGER_TYPE | START_TIME    | END_TIME | CALENDAR_NAME | MISFIRE_INSTR | JOB_DATA | 
+------------------+--------------------------+---------------+-------------+-----------+-------------+----------------+----------------+----------+---------------+--------------+---------------+----------+---------------+---------------+----------+ 
|defaultScheduler | cronTestQuartzJobTrigger | DEFAULT       | myQuartzJob | DEFAULT   | NULL        |  1473414390000 |  1473414385000 |        0 | ACQUIRED      | CRON         | 1473414210000 |        0 | NULL          |             0 |          | 
+------------------+--------------------------+---------------+-------------+-----------+-------------+----------------+----------------+----------+---------------+--------------+---------------+----------+---------------+---------------+----------+ 
1 row in set

mysql> select * from qrtz_job_details; 
+------------------+-------------+------------------+-------------+-----------------+------------+------------------+----------------+-------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
| SCHED_NAME       | JOB_NAME    | JOB_GROUP        | DESCRIPTION | JOB_CLASS_NAME  | IS_DURABLE | IS_NONCONCURRENT | IS_UPDATE_DATA | REQUESTS_RECOVERY | JOB_DATA

| defaultScheduler | myQuartzJob | DEFAULT          | NULL        | job.MyQuartzJob | 1          | 0                | 0              | 0                 |  

loadFactorI

mysql> select * from qrtz_locks; 
+------------------+----------------+ 
| SCHED_NAME       | LOCK_NAME      | 
+------------------+----------------+ 
| defaultScheduler | STATE_ACCESS   | 
| defaultScheduler | TRIGGER_ACCESS | 
+------------------+----------------+ 
2 rows in set

mysql> select * from qrtz_scheduler_state; 
+------------------+-----------------------+-------------------+------------------+ 
| SCHED_NAME       | INSTANCE_NAME         | LAST_CHECKIN_TIME | CHECKIN_INTERVAL | 
+------------------+-----------------------+-------------------+------------------+ 
| defaultScheduler | donaldHP1473414210553 |     1473414375985 |            15000 | 
+------------------+-----------------------+-------------------+------------------+ 
1 row in set

说明: 
定时任务配置有两种方式 
第一种:MethodInvokingJobDetailFactoryBean

Java代码  下载

  1. <bean id="myJobDetail"   class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

  2. <property name="targetObject" ref="myJob" />

  3. <property name="targetMethod" value="work" />

  4. <!-- <property name="concurrent" value="false" /> -->

  5. </bean>

如果用这种方式的话,要屏蔽一下配置

Java代码  下载

  1. <property name="dataSource" ref="dataSource" />

  2. <property name="quartzProperties">

  3. <props>

  4. <prop key="org.quartz.scheduler.instanceName">defaultScheduler</prop>

  5. <prop key="org.quartz.scheduler.instanceId">AUTO</prop>

  6. <!-- 线程池配置 -->

  7. <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>

  8. <prop key="org.quartz.threadPool.threadCount">20</prop>

  9. <prop key="org.quartz.threadPool.threadPriority">5</prop>

  10. <!-- JobStore配置 -->

  11. <prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop>

  12. <!-- 集群配置 -->

  13. <prop key="org.quartz.jobStore.isClustered">true</prop>

  14. <prop key="org.quartz.jobStore.clusterCheckinInterval">15000</prop>

  15. <prop key="org.quartz.jobStore.maxMisfiresToHandleAtATime">1</prop>

  16. <prop key="org.quartz.jobStore.misfireThreshold">120000</prop>

  17. <!-- 表名配置 -->

  18. <prop key="org.quartz.jobStore.tablePrefix">QRTZ_</prop>

  19. </props>

  20. </property>

第二种:JobDetailFactoryBean

Java代码  下载

  1. <bean id="myQuartzJobDetail"

  2. class="org.springframework.scheduling.quartz.JobDetailFactoryBean">

  3. <property name="jobClass" value="job.MyQuartzJob" />

  4. <property name="name" value="myQuartzJob" />

  5. <!-- 任务完成之后是否依然保留到数据库,默认false -->

  6. <property name="durability" value="true" />

  7. </bean>

主要是JobDetailFactory得实现不同,第一种不需要实现org.quartz.Job,而第二种需要实现org.quartz.Job;为什么会有这两种方式呢,用的时候该用那种方式,第一种方式定时任务存在RAM中,应用启动时,任务信息及任务调度信息易丢失,要避免任务信息及任务调度信息,需将任务相关信息持久化到RDB,这就是第二种方式的job为什么要实现org.quartz.Job原因,因为保存到数据库需要job-bean的相关信息。

转载于:https://blog.51cto.com/12064211/1851839

Spring与Quartz集成详解相关推荐

  1. Spring包含JAR的详解

    一.Spring 常用包的说明 spring.jar :  包含有完整发布模块的单个jar 包.但是不包括mock.jar, aspects.jar, spring-portlet.jar, and ...

  2. Quartz.Net详解

    Quartz.Net详解 代码仓库地址 Gitee:https://gitee.com/bluecusliyou Github:https://github.com/bluecusliyou 零.文章 ...

  3. Spring整合Schedule定时任务详解

    Spring整合Schedule定时任务详解 Spring 定时任务官方网站 一.概述 用Spring,就是为了简单. 但是我还是要总结下java定时任务实现的几种方式. 1.TimerTask,等于 ...

  4. Spring Cloud限流详解(附源码)

    在高并发的应用中,限流往往是一个绕不开的话题.本文详细探讨在Spring Cloud中如何实现限流. 在 Zuul 上实现限流是个不错的选择,只需要编写一个过滤器就可以了,关键在于如何实现限流的算法. ...

  5. spring框架 AOP核心详解

    AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,是个比较经典的例子. 一 AOP的基本概念 (1)Asp ...

  6. Spring&Quartz集成自定义注释

    我们知道Spring支持与Quartz框架集成. 但是到目前为止,Spring仅支持静态XML声明方法. 如果想了解如何将Spring与Quartz集成,可以参考Spring + Quartz + J ...

  7. java处理请求的流程_Java Spring mvc请求处理流程详解

    Spring mvc请求处理流程详解 前言 spring mvc框架相信很多人都很熟悉了,关于这方面的资料也是一搜一大把.但是感觉讲的都不是很细致,让很多初学者都云里雾里的.本人也是这样,之前研究过, ...

  8. Spring Cloud限流详解(内含源码)

    为什么80%的码农都做不了架构师?>>>    原文:http://www.itmuch.com/spring-cloud-sum/spring-cloud-ratelimit/ 在 ...

  9. SpringBoot2.1.5(16)--- Spring Boot的日志详解

    SpringBoot2.1.5(16)--- Spring Boot的日志详解 市面上有许多的日志框架,比如 JUL( java.util.logging), JCL( Apache Commons ...

最新文章

  1. 旷视MegEngine数据加载与处理
  2. 单片机要学多久才能自己开发?学单片机以后做什么?
  3. Vue中去掉表单对象上前后空格
  4. 小白如何入门Mybatis?这里有答案
  5. java struts2值栈ognl_Struts2的值栈和OGNL牛逼啊
  6. aspose 转pdf表格大小乱了_自己写了一个小工具类:pdf转word,没有页数和大小限制,保真!...
  7. obs中音频和视频的同步
  8. MySQL表设计(表的关联关系)
  9. 《波斯王子-时之砂》精美图文攻略
  10. ASP.NET ASHX 一般处理程序教程
  11. 1993年考研数学一解析pdf
  12. 国科大 - 模式识别与机器学习(黄庆明等)- 期末复习 - 试卷
  13. 十进制度分秒lisp函数_十进制度批量转换度分秒
  14. linux 刷新网络配置,3 Linux 网络配置
  15. VHDL实现数码管的动态扫描(可以连接其他的模块)
  16. 冉宝的每日一题--8月13日
  17. xlp 开发环境在Ubuntu11.4中的建立
  18. 一定要讲给孩子们的20个小故事
  19. [曲苑杂谈]mac\windows phpstorm快捷键
  20. Java Socket 如何接收byte和String

热门文章

  1. rtsp转rtmp服务linux,ubuntu安装流媒体服务器(nginx+rtmp,rtsp转rtmp,rtsp转m3u8)
  2. mac obs 录屏黑屏_差点被录屏软件搞死.......
  3. 编辑bpmn_「业务架构」BPMN简介第四部分-数据和工件
  4. 华人微型计算机之父,计算机之父是谁?
  5. c语言中1%100是什么意思,**************
  6. 《天天数学》连载43:二月十二日
  7. Python学习笔记:初探NumPy世界
  8. 大数据学习笔记03:安装配置CentOS7虚拟机
  9. 【BZOJ2437】【codevs1949】兔兔与蛋蛋游戏,博弈+二分图匹配
  10. 【BZOJ2324】营救皮卡丘,费用流