quartz与spring进行集成
上一篇将了quartz框架的使用,spring同样也提供了对quartz的集成。这次就尝试一下在spring中集成quartz。
要在spring中使用job,Trigger和Scheduler,就要在spring中配置这3个bean。
同样用上一篇的例子:对于job的配置,十分简单,在applicationContext.xml中加入这一一句
<!-- quartz要调用的工作类 --> <bean id="quartzJob" class="cn.edu.gdut.quartz.HelloQuartz"></bean>
这样,一个job就配置到了spring里面了。
对于JobDetail部分:
这里spring提供了更加灵活的方式,对于一个实现的org.quartz.Job接口的job来说以HelloQuartz来说,spring提供了JobDetailBean来实现调用,配置方式如下
<bean name="jobDatail" class= "org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value=" quartzJob " />
</bean>
这样,一个JobDetail就配置好了。
另外,spring还提供了一种吧没有实现org.quartz.Job接口的类配置的成为一个作业的方法。
package cn.edu.gdut.quartz;
public class DataService {
/**
* 定期推送服务
*/
public void push(){
//TODO 推送逻辑
}
}
比如对于以上的一个类,配置成一个bean
<!-- quartz要调用的工作类 --> <bean id="dataJob" class="cn.edu.gdut.quartz.DataService"></bean>
配置该bean的方式有些不同,因为没有实现org.quartz.Job类,我们要指定当触发事件到来时要调用这个实例的哪个方法
在spring中配置如下:
<bean id="dataJobDatail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 调用的类 -->
<property name="targetObject">
<ref bean="dataJob"/>
</property>
<!-- 调用类中的方法 -->
<property name="targetMethod">
<value>push</value>
</property>
</bean>
这样,同样也可以实现作业调用,其实从spring的命名也可以看出来这是指定调用方法的一个JobDetail。
然后是配置触发器
<bean id="cTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="jobDatail"/>
</property>
<!-- cron表达式 -->
<property name="cronExpression">
<value>*/10 * * * * ?</value>
</property>
</bean>
<bean id="dataTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="datJobDatail"/>
</property>
<!-- cron表达式 -->
<property name="cronExpression">
<value>*/20 * * * * ?</value>
</property>
</bean>
然后是调度器部分
<bean id="easyScheduler" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cTrigger"/>
<ref bean ="dataTrigger">
</list>
</property>
</bean>
调度器部分,如果设置了lazy-init为false后,则启动IoC容器的时候不需要人为干预就能启动调度任务了。
设置为true后要手动获取这个调度器的bean才会启动调度任务。
ApplicationContext context = new ClassPathXmlApplicationContext(
"application.xml");
context.getBean(easyScheduler);
这样,任务就启动了,剩下的工作也交个quartz啦。
quartz与spring进行集成的更多相关文章
- Quartz与Spring Boot集成使用
上次自己搭建Quartz已经是几年前的事了,这次项目中需要定时任务,需要支持集群部署,想到比较轻量级的定时任务框架就是Quartz,于是来一波. 版本说明 通过搜索引擎很容易找到其官网,来到Docum ...
- 定时任务quartz与spring的集成
我想要在spring的集成框架中使用spring , 暂时采用quartz 根据下面的几篇博客实现了(懒得说了,直接丢链接): Quartz实现动态定时任务 Spring 3整合Quartz 2实现定 ...
- Quartz与Spring集成
关于Quartz的基本知识,这里就不再多说,可以参考Quartz的example. 这里主要要说的是,个人在Quartz和Spring集成的过程中,遇到的问题和个人理解. 首先来说说个人的理解: 1. ...
- Quartz 在 Spring 中如何动态配置时间--转
原文地址:http://www.iteye.com/topic/399980 在项目中有一个需求,需要灵活配置调度任务时间,并能自由启动或停止调度. 有关调度的实现我就第一就想到了Quartz这个开源 ...
- spring中集成shiro
Shiro的组件都是JavaBean/POJO式的组件,所以非常容易使用Spring进行组件管理,可以非常方便的从ini配置迁移到Spring进行管理,且支持JavaSE应用及Web应用的集成. 在示 ...
- spring.net 集成nhibernate配置文件(这里暴露了GetCurrentSession 对于 CurrentSession unbond thread这里给出了解决方法)
我这里主要分成了两个xml来进行spring.net管理实际情况中可自己根据需要进行分类 Dao2.xml <?xml version="1.0" encoding=&quo ...
- 在Spring下集成ActiveMQ
1.参考文献 Spring集成ActiveMQ配置 Spring JMS异步发收消息 ActiveMQ 2.环境 在前面的一篇ActiveMQ入门实例中我们实现了消息的异步传送,这篇博文将如何在spr ...
- Quartz在Spring中动态设置cronExpression (spring设置动态定时任务)
什么是动态定时任务:是由客户制定生成的,服务端只知道该去执行什么任务,但任务的定时是不确定的(是由客户制定). 这样总不能修改配置文件每定制个定时任务就增加一个trigger吧,即便允许客户 ...
- Quartz与Spring整合进行热部署的实现(一)
先来几张实现图 任务管理页 新建任务管理.目前实现叫简单的需求...若各位同学要实现复杂的设计...quartz都有提供强大的支持.小弟目前的需求做到这已经够用了. 接下来.我们如何实现quartz的 ...
随机推荐
- Bash 中的 $0 在什么时候不是 argv[0]
每个 C 程序都有一个 main 函数,每个 main 函数都有一个 argv 参数,这个参数是一个字符串数组,这个数组的值是由该 C 程序的父进程在通过 exec* 函数启动它时指定的. 很多人说 ...
- “基础提供程序在Open上失败”
本来布置在IP为[x.x.x.x]的WCF服务好好的,但是今天突然就有问题了,一调用报错"基础提供程序在Open上失败"... 服务器上的有问题,先试试本地的服务能不能用吧,连的都 ...
- 1、Jsp页面
一.JSP(java server page):是以Java语言为基础的动态网页生成技术. 1.特点: a).以 .jsp 为后缀的文本文件,不需要编译(相对于程序猿来说不需要编译) b).以html ...
- PHP判断文件或者目录是否可写
在PHP中,可用is_writable()函数来判断一个 文件/目录 是否可写,详情如下: 参考 is_writable (PHP 4, PHP 5) is_writable — 判断给定的文件名是否 ...
- sql语句修改列
1.修改列名的常用语句 exec sp_rename '[dbo].[Table_1].[birthday]','birth' --将表中列名为birthday改为birdh 属性不变,用的是数据库 ...
- bash 语法使用
1.定义函数时,不需要使用function作为函数的命名. 函数不需要形参. 函数名不能以数字作为开头 main() { in ) 1_start ;; ) 1_start 5_start ;; ) ...
- AngularJS ui-router (嵌套路由)
http://www.oschina.net/translate/angularjs-ui-router-nested-routes AngularJS ui-router (嵌套路由) 英文原文:A ...
- Angular2 管道
1. 说明 管道用来转换模板显示的内容,应用程序中经常出现获取数据,转换数据,显示数据的逻辑.管道就是用来在转换数据阶段起作用的.主要存在两种类型的管道,pure pipe和impure pipe 2 ...
- MyEclipse无法删除项目下的文件
想删除老版本的jar包或文件,却怎么也删不了, 总是提示Problems encountered while deleting resources. Could not delete 后来关闭myec ...
- C语言字符串操作总结大全
1)字符串操作 strcpy(p, p1) 复制字符串 函数原型strncpy(p, p1, n) 复制指定长度字符串 函数原型strcat(p, p1) 附加字符串 函数原型strn ...