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. Dapper 嵌套对象查询

    我有这样一个一对一关系的表结构:User->UserInfo User: /// <summary> /// 用户 /// </summary> [Serializabl ...

  2. 一起学习MVC(3)Views的学习

          _ViewStart.cshtml._Layout.cshtml.Index.cshtml三个页面加载时候的先后顺序就是: _Layout.cshtml ViewStart.cshtml ...

  3. ASP.NET MVC中设置跨域

    ASP.NET MVC中设置跨域 1.什么是跨域请求 js禁止向不是当前域名的网站发起一次ajax请求,即使成功respone了数据,但是你的js仍然会报错.这是JS的同源策略限制,JS控制的并不是我 ...

  4. s11 day105

  5. 频繁项集挖掘之apriori和fp-growth

    Apriori和fp-growth是频繁项集(frequent itemset mining)挖掘中的两个经典算法,虽然都是十几年前的,但是理解这两个算法对数据挖掘和学习算法都有很大好处.在理解这两个 ...

  6. Java之常用类库

    1.Java常用类库(一):http://blog.csdn.net/e6894853/article/details/7925469 1.Java常用类库(二):http://blog.csdn.n ...

  7. 字蛛fontSpider的使用

    字蛛官方文档 http://font-spider.org/index.html 首先安装全局包  npm install font-spider -g 然后下载字体 ,本次需要的是  "造 ...

  8. 【BZOJ3217】ALOEXT 分块

    题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3217 分块过掉辣!!!!!!$O(n^{1.5}+q\times \sqrt{n})$的 ...

  9. 剑指offer二十四之二叉树中和为某一值的路径

    一.题目 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. 二.思路 详见代码 三.代码 1.解答代码 im ...

  10. Spring Security构建Rest服务-0702-个性化用户认证流程2

    登录成功后的处理AuthenticationSuccessHandler: 认证成功后,默认情况下spring security会继续访问之前访问的url,如果想自定义处理逻辑,用默认的就不行了.此时 ...