版权声明:本文为博主原创文章,如需转载,请标明出处。 https://blog.csdn.net/alan_liuyue/article/details/80382324

Quartz简介

  1.Quartz,是一个完全由java编写的开源作业调度框架。它包含了调度器监听、作业和触发器监听,而我们在项目中最常用到的就是它可以作为一个定时器,可以随时配置监听、触发任务进行作业。
  2.在Spring的框架里,Quartz已经被很好地集成,我们只需要在xml文件里面配一下定时时间就可以自动执行任务了。
  3.本博客主要介绍的是一个quartz项目的完整的搭建、配置以及成功运行的过程,里面包含了多个定时器的配置以及多个数据库的配置方法,非常适合新手去接触和掌握quartz的使用而且还附有完整的quartz定时器项目实例下载,项目下载地址:QuartzTask定时器项目实例

项目实例详解

  1.首先我们看一下整个项目的结构,最基本的spring架构:
 
  2.接下来我们将逐个步骤去搭建、配置以及运行这个项目,每个步骤在项目里面我都配有详细的说明,
   (1)首先,我们看一下web.xml配置: 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"><listener><listener-class>org.springframework.web.util.Log4jConfigListener</listener-class></listener><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 加载spring配置文件 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:applicationContext*.xml</param-value></context-param><context-param><param-name>log4jConfigLocation</param-name><param-value>classpath:log4j.properties</param-value></context-param><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list>
</web-app>

   (2)其次,我们看一下加载的spring配置文件applicationContext.xml配置: 

    <!-- 加载配置属性文件,数据库文件 --><context:property-placeholder ignore-unresolvable="true" location="classpath:/jdbc.properties" /><!-- 使用Annotation自动注册Bean --><context:component-scan base-package="com.hqc"><!-- base-package 如果多个,用“,”分隔 --><context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan><!-- 数据源可自行配置添加多个,这里只演示postgresql和mysql数据源示例,需要哪些可自行添加测试,都是经过实践成功的--><!-- Postgresql数据库连接配置 --><bean id="postgresqlDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"><property name="driverClassName" value="org.postgresql.Driver"></property><property name="url" value="jdbc:postgresql://localhost:2345/jftest"></property><property name="username" value="postgres"></property><property name="password" value="1234"></property><property name="initialSize" value="20"></property><property name="maxActive" value="20"></property><property name="defaultAutoCommit" value="true"></property></bean><!-- Mysql数据库连接配置--><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  destroy-method="close"><property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" />       <property name="password" value="${jdbc.password}" /></bean><!-- oracle数据库连接配置, 使用 BoneCP数据库连接池 <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="driverClassName" value="${jdbc.driver}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /><property name="initialSize" value="${jdbc.pool.init}" /><property name="minIdle" value="${jdbc.pool.minIdle}" /> <property name="maxActive" value="${jdbc.pool.maxActive}" /><property name="maxWait" value="60000" /><property name="timeBetweenEvictionRunsMillis" value="60000" /><property name="minEvictableIdleTimeMillis" value="300000" /><property name="validationQuery" value="${jdbc.testSql}" /><property name="testWhileIdle" value="true" /><property name="testOnBorrow" value="false" /><property name="testOnReturn" value="false" /><property name="filters" value="stat" /> </bean>--><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource"><ref bean="dataSource" /></property></bean><!-- Greenplum数据库连接配置 <bean id="postgresqlDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"><property name="driverClassName" value="com.pivotal.jdbc.GreenplumDriver"></property><property name="url" value="jdbc:pivotal:greenplum://localhost:2345;DatabaseName=jftest"></property><property name="username" value="greenplum"></property><property name="password" value="1234"></property><property name="initialSize" value="20"></property><property name="maxActive" value="20"></property><property name="defaultAutoCommit" value="true"></property></bean>--><!-- 定时器1 --><bean id="taskTrigger1" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"><property name="jobDetail"><bean
                class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><property name="targetObject"><bean class="com.hqc.service.DataStaticService"></bean><!--目标类--></property><property name="targetMethod" value="testMethod1" /><!--目标方法--><property name="concurrent" value="false" /></bean></property><property name="cronExpression"><!-- 秒、分、时、日期、月份、星期、年 --><!-- 具体的更多的写法可以参照:https://blog.csdn.net/alan_liuyue/article/details/80222565 --><value>0/5 * * * * ? </value>  <!-- 每五秒执行一次 --></property></bean><!-- 定时器2--><bean id="taskTrigger2" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"><property name="jobDetail"><bean class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><property name="targetObject"><bean class="com.hqc.service.DataStaticService"></bean></property><property name="targetMethod" value="testMethod2" /><property name="concurrent" value="false" /></bean></property><property name="cronExpression"><value>0 0 0/1 * * ?</value> <!-- 每一小时执行一次 --></property></bean><!-- 总调度用于启动Spring定时器,可以启动多个,需要启动哪一个就去掉注释即可--><bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><property name="triggers"><list><ref bean="taskTrigger1" /> <!--调度第一个定时任务 --><ref bean="taskTrigger2" /> <!--调度第二个定时任务 --></list></property></bean>

   (3)然后,就是数据库的配置文件jdbc.properties,这个文件可以将所有的数据库连接属性都写在里面,当然你也可以直接在applicationContext.xml里面直接配置数据库信息,一个项目可以配置多个数据源,相信大家都是没问题的:

##oracle数据库配置
#jdbc.type=oracle
#jdbc.driver=oracle.jdbc.driver.OracleDriver
#jdbc.url=jdbc:oracle:thin:@localhost:1521:testora
#jdbc.username=test
#jdbc.password=test
##pool settings
#jdbc.pool.init=10
#jdbc.pool.minIdle=30
#jdbc.pool.maxActive=50
##jdbc.testSql=SELECT 'x'
#jdbc.testSql=SELECT 'x' FROM DUAL#mysql数据库配置
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/jftest?useSSL=false&useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=1234

   (4)接下来我们再讲一下项目里面的各个文件的作用,这里直接用一张图给大家进行展示说明:
  
   (5)我们看一下在配置文件里quartz指定的定时执行的方法:

/*** * @author hqc* @version 2018年05月20日**/
public class DataStaticService {protected static Logger logger = Logger.getLogger(DataStaticService.class);@AutowiredDataPostgresqlDao dataPostgresqlDao;@AutowiredDataOracleDao dataOracleDao;/*** 测试定时方法1*/public void testMethod1(){Calendar c = Calendar.getInstance();String today = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(c.getTime()); System.out.println("定时任务程序运行时间:"+today);System.out.println("定时查询oracle库t_user表的数据数量:"+dataOracleDao.queryTest().size());    }/*** 测试定时方法2*/public void testMethod2(){Calendar c = Calendar.getInstance();String today = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(c.getTime()); //昨天的当前时间
//      c.add(Calendar.DATE, -1);
//      String yesterday = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(c.getTime());System.out.println("定时任务程序运行时间:"+today);System.out.println("定时查询postgresql库t_user表的数据数量:"+dataPostgresqlDao.queryTest().size());}}

   (6)最后,我们看一下定时任务执行的效果,这里我设置的是每5秒执行一次:
  

总结

  1.好了,以上就是spring框架使用Quartz执行定时任务完整实例详解,很适合新手去熟悉和掌握quartz;
  2.实践是认识真理性的唯一标准,通过这一个简单的项目实践,有兴趣的小伙伴们能继续去深入研究,从而形成一套适合自己的定时器项目,在项目中运用的时候就会事半功倍;

spring框架使用Quartz执行定时任务实例详解相关推荐

  1. spring框架学习笔记2:配置详解

    简单写一个类做示例: package bean;public class User {private String name;private Integer age;public String get ...

  2. JavaScript中立即执行函数实例详解 转载 作者:李牧羊

    javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法也是对javascript语言特性更进一步的深入理解.这篇文章 ...

  3. async spring 默认线程池_Spring boot注解@Async线程池实例详解

    这篇文章主要介绍了Spring boot注解@Async线程池实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 从Spring3开始提供了@A ...

  4. java前端长连接框架_Java中Spring Boot+Socket实现与html页面的长连接实例详解

    Spring Boot+Socket实现与html页面的长连接,客户端给服务器端发消息,服务器给客户端轮询发送消息,附案例源码 功能介绍 客户端给所有在线用户发送消息客户端给指定在线用户发送消息服务器 ...

  5. python 录制web视频_Python django框架 web端视频加密的实例详解

    视频加密流程图: 后端获取保利威的视频播放授权token,提供接口api给前端 参考文档:http://dev.polyv.net/2019/videoproduct/v-api/v-api-play ...

  6. spring使用注解@Scheduled执行定时任务

    =最近做的项目中遇到了用spring中@Schedule注解执行定时任务的功能,这里简单记录一下. 首先在applicationContext.xml中进行配置: xmlns 加下面的内容 xsi:s ...

  7. php gearman 定时任务,php使用gearman进行任务分发操作实例详解

    php使用gearman进行任务分发操作实例详解,创建一个,客户端,操作,实例,回调 php使用gearman进行任务分发操作实例详解 易采站长站,站长之家为您整理了php使用gearman进行任务分 ...

  8. java 远程shell脚本_java通过ssh连接服务器执行shell命令详解及实例

    java通过ssh连接服务器执行shell命令详解 java通过ssh连接服务器执行shell命令:JSch 是SSH2的一个纯Java实现.它允许你连接到一个sshd 服务器,使用端口转发,X11转 ...

  9. oracle select执行顺序,oracle select执行顺序的详解

    oracle select执行顺序的详解 SQL Select语句完整的执行顺序:1.from子句组装来自不同数据源的数据: 2.where子句基于指定的条件对记录行进行筛选: 3.group by子 ...

最新文章

  1. AngularJS ui-router (嵌套路由)
  2. 开启文件高级共享功能
  3. 《网络空间欺骗:构筑欺骗防御的科学基石》一1.1 主动网络空间防御中网络空间抵赖与欺骗的视图...
  4. Docker基本命令入门
  5. 少讲大道理,多解决小问题
  6. 配置远程jupyter notebook
  7. Java项目:在线购书商城系统(java+jsp+mysql+servlert+ajax)
  8. 三菱凌云3故障代码_三菱故障代码一览表
  9. iOS证书(.p12)和描述文件(.mobileprovision)申请
  10. 互联网日报 | 字节跳动发布独立教育品牌“大力教育”;哈啰出行试水网约车;京东“好房京选”线下品牌落地...
  11. 单机版pc端车牌识别
  12. java io流过滤流_JAVA io流 文件流 字节流 字符流 过滤流 缓冲流
  13. java gette_Java setter,getter(滚压模具)
  14. gdb、ida调试笔记
  15. 英语月份、星期、日期的缩写
  16. 《Uncertainty-aware Joint Salient Object and Camouflaged Object Detection》—CVPR2021—SOD+COD
  17. Hank老师推荐的一些博客
  18. VIP_OSP--基于Thrift的RPC框架的基本原理
  19. pycharm笔记-动手学深度学习(李沐)微积分课后习题
  20. [激光原理与应用-15]:《激光原理与技术》-1- 什么是激光,激光概述

热门文章

  1. linux脚本重定向到输入,linux shell输入输出重定向
  2. vim 配置文件 C/C++
  3. 实现费用管理 mysql_移动电费房租管理系统的设计与实现(IDEA,MySQL)
  4. 兼容ie8_兼容IE8的一些笔记
  5. ceph auth get_服装百科|get到羽绒服的“绒”干货,你就能做好设计
  6. 杭电oj2035c语言答案,杭电oj 2035
  7. java socket datagramsocket_用DatagramSocket写的个渣渣聊天后台,求拍砖
  8. 【 FPGA 】7 Series FPGA中对MUX的设计指导
  9. # 内存屏障:骇客的硬件视角(1)
  10. promise async 学习笔记