Quartz与Spring的整合使用
之前说到过Quartz的基本使用(猛戳这里看文章)。在实际使用中,我们一般会将定时任务交由spring容器来管理。所以今天我们来说说Quartz与spring的整合。
咱们还是依照Quartz的三大元素的顺序来聊聊整合使用。
作业任务
在spring中对于Quartz的作业任务管理主要提供了两种方式,JobDetailFactoryBean和MethodInvokingJobDetailFactoryBean,它们都在org.springframework.scheduling.quartz这个包下。以下我们来看看它们的使用。
- JobDetailFactoryBean
spring对这个类的解释为:A Spring FactoryBean for creating a Quartz JobDetail instance, supporting bean-style usage for JobDetail configuration.
一个用于创建Quartz JobDetail实例的。支持以bean定义风格来配置JobDetail的工厂bean。
对于在spring中的使用也是非常easy,首先我们须要创建一个详细的作业任务的实现类。使用JobDetailFactoryBean来管理作业任务时,我们的作业任务实现类须要继承QuartzJobBean类,并覆盖其executeInternal方法。就像以下这样。
public class SimpleJob extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext arg0)
throws JobExecutionException {
System.out.println("如今时间为:"+new Date());
//能够通过上下文获取到JobDataMap,这里面能够存放一些參数类型的数据
JobDataMap dataMap=arg0.getMergedJobDataMap();
String wish=(String) dataMap.get("wish");
System.out.println(wish);
}
}
然后就在spring容器中例如以下配置:
<bean id="jobDetailFactoryBeanExample" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<!--
參考源代码。我们能够看到属性jobClass为Class类型。所以不能使用ref来引用一个bean。否则就会由于不能将bean转换为Class类型而出现异常。
<property name="jobClass" ref="simpleJob"/>
必须使用value对jobClass赋值。
<property name="jobClass" value="com.earl.quartz.spring.job.SimpleJob"/>
-->
<property name="jobClass" value="com.earl.quartz.spring.job.SimpleJob"/>
<!-- 这里设置的jobDataAsMap能够传递一些參数给作业任务 -->
<property name="jobDataAsMap">
<map>
<entry key="wish" value="hello"/>
</map>
</property>
</bean>
- MethodInvokingJobDetailFactoryBean
spring对这个类的解释:FactoryBean that exposes a JobDetail object which delegates job execution to a specified (static or non-static) method.
这个FactoryBean提供JobDetail对象,这个对象能够指定作业任务的运行方法。
由于能够指定作业调度时运行的内容,所以使用起来就比JobDetailFactoryBean更加的灵活方便。首先我们还是创建一个作业任务的详细实现类,这个实现类就不须要继承或实现其它的父类,仅仅须要将我们想要运行的作业任务声明在详细的方法中就可以。例如以下:
public class ExampleJob{
public void execute(){
System.out.println("如今是"+new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒").format(new Date()));
}
}
然后在spring容器中例如以下配置就可以:
<!--
假设两个触发器触发同一个作业,那么第二个作业可能在第一个作业完毕之前被触发。
将作业类实现StatefulJob接口就能够避免这样的情况。
将concurrent设置为false能够避免并发的发生。
-->
<!-- 使用MethodInvokingJobDetailFactoryBean来创建作业对象 -->
<bean id="exampleJob" class="com.earl.quartz.spring.job.ExampleJob"/>
<bean id="methodInvokingJobDetailFactoryBeanExample" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 目标对象,指的是作业任务的实现类 -->
<property name="targetObject" ref="exampleJob"/>
<!-- 目标方法,指的是指定实现类中的哪个方法作为调度时的运行方法 -->
<property name="targetMethod" value="execute"/>
<!-- 是否并发 -->
<property name="concurrent" value="false"/>
</bean>
以上就是作业任务的相关内容,以下我们来看看触发器这个可爱的小东东。
触发器
在spring中,触发器也分为simpleTrigger和cronTrigger。并且它们的使用也是非常easy,仅仅须要配置一个bean元素就可以。以下我们分别看看它们两者的配置:
- simpleTrigger
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
<!-- 这里的JobDetail指的就是我们配置的作业任务的bean -->
<property name="jobDetail" ref="methodInvokingJobDetailFactoryBeanExample" />
<!-- 延迟5秒開始 -->
<property name="startDelay" value="5000"></property>
<!-- 每3秒反复一次 -->
<property name="repeatInterval" value="3000"></property>
</bean>
- cronTrigger
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<!-- 这里的JobDetail指的就是我们配置的作业任务的bean -->
<property name="jobDetail" ref="jobDetailFactoryBeanExample"/>
<!--cronExpression,cron表达式-->
<property name="cronExpression" value="40 52 17 * * ?"/>
</bean>
以上就是触发器的基本配置。上述两个触发器的工厂bean另一些其它的属性,比如jobDataMap,priority等等。假设有须要,您能够參考相关的文档。
调度程序
最后,最简单的莫过于作业调度程序了,在spring中仅仅须要这样配置就可以:
<bean id="startQuartz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false">
<!--指定使用哪些触发器。spring会去调度触发对应的触发器。进而对作业任务进行调度处理-->
<property name="triggers">
<list>
<!-- <ref bean="simpleTrigger"/> -->
<ref bean="cronTrigger"/>
</list>
</property>
</bean>
总结
以上就是对Quartz与Spring的整合使用的基本介绍了。
整体来说,Quartz的定时任务功能已经非常强大了,而spring对其的整合更是让程序猿在使用定时任务是如虎添翼。对于Quartz来说还有非常多其它的功能,比如定时文件扫描。定时发送邮件等等,之后在另外一篇文章中再进行详细介绍。
猛戳这里下载源代码
说明:本文介绍的是Quartz与Spring的整合使用,所以请參考源代码时关注com.earl.quartz.spring包下内容就可以,其它可自行忽略。
Quartz与Spring的整合使用的更多相关文章
- Quartz与Spring整合进行热部署的实现(一)
先来几张实现图 任务管理页 新建任务管理.目前实现叫简单的需求...若各位同学要实现复杂的设计...quartz都有提供强大的支持.小弟目前的需求做到这已经够用了. 接下来.我们如何实现quartz的 ...
- spring boot 整合quartz ,job不能注入的问题
在使用spring boot 整合quartz的时候,新建定时任务类,实现job接口,在使用@AutoWire或者@Resource时,运行时出现nullpointException的问题.显然是相关 ...
- spring boot整合quartz实现多个定时任务
版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/liuchuanhong1/article/details/78543574 最近收到了很多封邮件, ...
- spring boot 整合 quartz 集群环境 实现 动态定时任务配置【原】
最近做了一个spring boot 整合 quartz 实现 动态定时任务配置,在集群环境下运行的 任务.能够对定时任务,动态的进行增删改查,界面效果图如下: 1. 在项目中引入jar 2. 将需要 ...
- Quartz 在 Spring 中如何动态配置时间--转
原文地址:http://www.iteye.com/topic/399980 在项目中有一个需求,需要灵活配置调度任务时间,并能自由启动或停止调度. 有关调度的实现我就第一就想到了Quartz这个开源 ...
- 定时任务quartz与spring的集成
我想要在spring的集成框架中使用spring , 暂时采用quartz 根据下面的几篇博客实现了(懒得说了,直接丢链接): Quartz实现动态定时任务 Spring 3整合Quartz 2实现定 ...
- 实际工程Quartz与Spring设计与实现一体化的热部署
1.需求说明 主要负责项目任务调度.使用Quartz.以Spring为辅助. 如今有这样一个需求:我们不知道管理员想设定过多厂时间运行主任务,须要在配置文件定义.在配置好后须要马上运行.实现热部署. ...
- 【Spring Boot学习之六】Spring Boot整合定时任务&异步调用
环境 eclipse 4.7 jdk 1.8 Spring Boot 1.5.2一.定时任务1.启动类添加注解@EnableScheduling 用于开启定时任务 package com.wjy; i ...
- struts2 spring mybatis 整合(test)
这几天搭了个spring+struts2+mybatis的架子,练练手,顺便熟悉熟悉struts2. 环境:myEclipse10+tomcat7+jdk1.6(1.8的jre报错,所以换成了1.6) ...
随机推荐
- django定义模型类
模型类被定义在应用文件夹下的model.py中 模型类必须继承Django的models.Model类 属性名不能用连续的两条下划线__ 主键:primary key,简写 pk 不需要主动定义,dj ...
- docker run 的背后的故事(zz)
当利用docker run来创建并启动容器的时候,docker后台标准的操作包括: 1.检查本地是否存在指定的镜像,不存在就从公有仓库下载. 当我依瓢画葫芦的运行: sudo docker run - ...
- [BZOJ3585]mex 主席树
3585: mex Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1252 Solved: 639[Submit][Status][Discuss] ...
- UVA 11636.Hello World!-水题
Hello World! Time limit: 1.000 seconds When you first made the computer to print the sentence “Hello ...
- 解决windows下文件拷贝到ubuntu下文件名乱码的问题
sudo apt-get install convmv 解压zip文件: convmv -f gbk -t utf8 -r --notest *
- codeforces-455A
题目连接:http://codeforces.com/contest/455/problem/A A. Boredom time limit per test 1 second memory limi ...
- python3爬虫爬取网页思路及常见问题(原创)
学习爬虫有一段时间了,对遇到的一些问题进行一下总结. 爬虫流程可大致分为:请求网页(request),获取响应(response),解析(parse),保存(save). 下面分别说下这几个过程中可以 ...
- HDU1754I Hate It(线段树)
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- Linux命令之install
install [选项] 源文件 目标文件 install [选项] 源文件 目录 install [选项] –t 目录 源文件 install [选项] –d 目录 install作用是安装或升级软 ...
- 01、Mecanim动画系统
序言:Mecanim动画系统是Unity4.0之后退出的新版动画系统,非常适合人类动画系统.本文是作为自己的学习来讲解的, 可能会有些啰嗦,但尽量把自己的坑都为大家列出来,让大家理解透彻. 一.文件的 ...