ONE、除了引入 Spring 相关的 jar 包,还要引入 Quartz 的 jar 包

        <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${springversion}</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.2.2</version>
</dependency>

  这里用的是 MAVEN,普通工程自行下载 jar 包即可。

TWO、调度任务类 QuartzJob.java

package test;

public class QuartzJob {

    public void work1() {
System.out.println("Quartz定时器!!!work1 doing…");
} public void work2() {
System.out.println("Quartz定时器!!!work2 doing…");
} }

  里面定义两个方法,quartz配置文件里也会用两种方式配置 类 和 方法。

THREE、Spring 配置 spring-quartz.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:context="http://www.springframework.org/schema/context"
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.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"
default-autowire="byName" default-lazy-init="true"> <!-- 要调用的工作类 -->
<bean id="testJob" class="test.QuartzJob"></bean> <!-- 配置任务并发执行线程池 -->
<bean id="executor"
class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<!-- 核心线程数 线程池维护线程的最少数量 -->
<property name="corePoolSize" value="100" />
<!-- 线程池维护线程所允许的空闲时间 -->
<property name="keepAliveSeconds" value="200" />
<!-- 线程池维护线程的最大数量 -->
<property name="maxPoolSize" value="100" />
<!-- 线程池所使用的缓冲队列 -->
<property name="queueCapacity" value="2000" />
<!-- 线程池对拒绝任务(无线程可用)的处理策略 ThreadPoolExecutor.CallerRunsPolicy策略 ,调用者的线程会执行该任务,如果执行器已关闭,则丢弃. -->
<property name="rejectedExecutionHandler">
<bean class="java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy" />
</property>
</bean> <!-- 定义调用对象和调用对象的方法 -->
<bean id="testTask"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 调用的类 -->
<property name="targetObject">
<ref bean="testJob" />
</property>
<!-- 调用类中的方法 -->
<property name="targetMethod">
<value>work1</value>
</property>
</bean>
<bean id="testTask2"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 调用的类 -->
<property name="targetObject" ref="testJob" />
<!-- 调用类中的方法 -->
<property name="targetMethod" value="work2" />
</bean> <!-- 调度触发器 -->
<bean id="jibDoTime"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail">
<ref bean="testTask" />
</property>
<!-- cron表达式 1秒执行一次 -->
<property name="cronExpression">
<value>0/1 * * * * ?</value>
</property>
</bean>
<bean id="jibDoTime2"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="testTask2" />
<property name="cronExpression" value="0/2 * * * * ?" />
</bean> <!-- 调度工厂 如果将lazy-init='false'那么容器启动就会执行调度程序 -->
<bean id="startQuertz" lazy-init="false" autowire="no"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="jibDoTime" />
<ref bean="jibDoTime2" />
</list>
</property>
<!-- 设置 QuartzScheduler 延时启动,应用启动完后 QuartzScheduler 再启动 -->
<property name="startupDelay" value="5" />
<property name="taskExecutor" ref="executor" />
</bean>
</beans>

FOUR、web.xml 里加载 quartz

       <context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:spring-quartz.xml
</param-value>
</context-param>

下面虽然不太重要,但很能说服人~

Quartz定时器!!!work1 doing…
2017-09-14 15:36:32,009 DEBUG [org.quartz.core.QuartzSchedulerThread] - batch acquisition of 1 triggers
2017-09-14 15:36:32,009 DEBUG [org.quartz.core.JobRunShell] - Calling execute on job DEFAULT.testTask
Quartz定时器!!!work1 doing…
2017-09-14 15:36:32,012 DEBUG [org.quartz.core.QuartzSchedulerThread] - batch acquisition of 1 triggers
2017-09-14 15:36:32,012 DEBUG [org.quartz.core.JobRunShell] - Calling execute on job DEFAULT.testTask2
Quartz定时器!!!work2 doing…
2017-09-14 15:36:33,003 DEBUG [org.quartz.core.QuartzSchedulerThread] - batch acquisition of 1 triggers
2017-09-14 15:36:33,003 DEBUG [org.quartz.core.JobRunShell] - Calling execute on job DEFAULT.testTask
Quartz定时器!!!work1 doing…
2017-09-14 15:36:34,007 DEBUG [org.quartz.core.QuartzSchedulerThread] - batch acquisition of 1 triggers
2017-09-14 15:36:34,007 DEBUG [org.quartz.core.JobRunShell] - Calling execute on job DEFAULT.testTask
Quartz定时器!!!work1 doing…
2017-09-14 15:36:34,009 DEBUG [org.quartz.core.QuartzSchedulerThread] - batch acquisition of 1 triggers
2017-09-14 15:36:34,009 DEBUG [org.quartz.core.JobRunShell] - Calling execute on job DEFAULT.testTask2
Quartz定时器!!!work2 doing…
2017-09-14 15:36:35,004 DEBUG [org.quartz.core.JobRunShell] - Calling execute on job DEFAULT.testTask
......

本文到此结束啦~

Spring配置Quartz任务调度、及 ThreadPool 线程池的更多相关文章

  1. Tomcat启动时加载数据到缓存---web.xml中listener加载顺序(例如顺序:1、初始化spring容器,2、初始化线程池,3、加载业务代码,将数据库中数据加载到内存中)

    最近公司要做功能迁移,原来的后台使用的Netty,现在要迁移到在uap上,也就是说所有后台的代码不能通过netty写的加载顺序加载了. 问题就来了,怎样让迁移到tomcat的代码按照原来的加载顺序进行 ...

  2. ThreadPool线程池 小结

    ThreadPool类提供一个线程池,该线程池可用于发送工作项.处理异步 I/O.代表其他线程等待以及处理计时器 线程池通过为应用程序提供一个由系统管理的辅助线程池使您可以更为有效地使用线程.一个线程 ...

  3. 转载【浅谈ThreadPool 线程池】

    浅谈ThreadPool 线程池 http://www.cnblogs.com/xugang/archive/2010/04/20/1716042.html

  4. 【多线程】-ThreadPool线程池

    ThreadPool介绍: Thread类是一个静态类,所有不存在实例化构造函数操作,直接可以调用其内所存在的方法. 微软官网给出的解释: 提供一个线程池,该线程池可用于执行任务.发送工作项.处理异步 ...

  5. .net 线程基础 ThreadPool 线程池

    1. ThreadPool 线程池异步: //public static bool QueueUserWorkItem(WaitCallback callBack); //public static ...

  6. 浅谈ThreadPool 线程池(引用)

    出自:http://www.cnblogs.com/xugang/archive/2010/04/20/1716042.html 浅谈ThreadPool 线程池 相关概念: 线程池可以看做容纳线程的 ...

  7. 多线程之旅(ThreadPool 线程池)

    一.什么是ThreadPool 线程池(源码) 1.线程池顾名思义,有我们的系统创建一个容器装载着我们的线程,由CLR控制的所有AppDomain共享.线程池可用于执行任务.发送工作项.处理异步 I/ ...

  8. 从零开始学 Java - Spring 使用 Quartz 任务调度定时器

    生活的味道 睁开眼看一看窗外的阳光,伸一个懒腰,拿起放在床一旁的水白开水,甜甜的味道,晃着尾巴东张西望的猫猫,在窗台上舞蹈.你向生活微笑,生活也向你微笑. 请你不要询问我的未来,这有些可笑.你问我你是 ...

  9. C#异步编程的实现方式——ThreadPool线程池

    在需要创建的线程很多,且都是比较小的线程的情况下,可以使用线程池(ThreadPool类).ThreadPool是一个静态方法,提供了对一个线程集合的操作,它会在线程数不足时增加线程,空闲线程数过多时 ...

随机推荐

  1. Jesery客户端工具类

    public class JerseyClientUtil { public static<T> T sendMsg(String url,Object object,Class<T ...

  2. python 查找字符串同时包含数字和字母的最长子字符串的几种实现方法

    有个字符串$sd1#111$svda123!!!221&eSSDSDG,包含特殊字符.数字和字母,输出最长的子字符串和他的长度 例如上面的字符串同时包含数字和字母的字符串是svda123,长度 ...

  3. 《JavaScript高级程序设计》第六章【面向对象的程序设计】 包括对象、创建对象、继承

    一.理解对象 二.创建对象      1. 工厂模式      2. 构造函数模式      3. 原型模式      4. 组合使用构造函数模式和原型模式[使用最广泛]      5. 动态原型模式 ...

  4. MyCat - 背景篇(1)

    此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. SQL与NoSQL 目前,对于互联网海量数据的存储以及处理,按使用场景,分为OLTP(联机事务处理,比如即时 ...

  5. POST与GET请求的区别

    https://www.cnblogs.com/logsharing/p/8448446.html 返回主页 在途中# 博客园首页新随笔联系订阅管理 随笔 - 33 文章 - 5 评论 - 40 GE ...

  6. Python实现汉诺塔问题的可视化(以动画的形式展示移动过程)

    学习Python已经有一段时间了,也学习了递归的方法,而能够实践该方法的当然就是汉诺塔问题了,但是这次我们不只是要完成对汉诺塔过程的计算,还要通过turtle库来体现汉诺塔中每一层移动的过程. 一.设 ...

  7. jQuery基础笔记(2)

    day54 筛选器 参考:https://www.cnblogs.com/liwenzhou/p/8178806.html#autoid-1-7-5 筛选器方法 下一个元素: $("#id& ...

  8. 学习Python中的集合

    创建集合 使用工厂方法 set()和 frozenset(): >>> s = set('cheeseshop') >>> s set(['c', 'e', 'h' ...

  9. Gson简单使用

    最近做个IM类型的Android 应用,由于有三种客户端(pc,ios,Android),所以底层使用的是C++与服务器通信,所以通信部分基本上有c++完成,封装好Jni即可,可以把底层c++通信看成 ...

  10. javascript数据结构与算法--二叉树(插入节点、生成二叉树)

    javascript数据结构与算法-- 插入节点.生成二叉树 二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 /* *二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 * * ...