上一篇将了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进行集成的更多相关文章

  1. Quartz与Spring Boot集成使用

    上次自己搭建Quartz已经是几年前的事了,这次项目中需要定时任务,需要支持集群部署,想到比较轻量级的定时任务框架就是Quartz,于是来一波. 版本说明 通过搜索引擎很容易找到其官网,来到Docum ...

  2. 定时任务quartz与spring的集成

    我想要在spring的集成框架中使用spring , 暂时采用quartz 根据下面的几篇博客实现了(懒得说了,直接丢链接): Quartz实现动态定时任务 Spring 3整合Quartz 2实现定 ...

  3. Quartz与Spring集成

    关于Quartz的基本知识,这里就不再多说,可以参考Quartz的example. 这里主要要说的是,个人在Quartz和Spring集成的过程中,遇到的问题和个人理解. 首先来说说个人的理解: 1. ...

  4. Quartz 在 Spring 中如何动态配置时间--转

    原文地址:http://www.iteye.com/topic/399980 在项目中有一个需求,需要灵活配置调度任务时间,并能自由启动或停止调度. 有关调度的实现我就第一就想到了Quartz这个开源 ...

  5. spring中集成shiro

    Shiro的组件都是JavaBean/POJO式的组件,所以非常容易使用Spring进行组件管理,可以非常方便的从ini配置迁移到Spring进行管理,且支持JavaSE应用及Web应用的集成. 在示 ...

  6. spring.net 集成nhibernate配置文件(这里暴露了GetCurrentSession 对于 CurrentSession unbond thread这里给出了解决方法)

    我这里主要分成了两个xml来进行spring.net管理实际情况中可自己根据需要进行分类 Dao2.xml <?xml version="1.0" encoding=&quo ...

  7. 在Spring下集成ActiveMQ

    1.参考文献 Spring集成ActiveMQ配置 Spring JMS异步发收消息 ActiveMQ 2.环境 在前面的一篇ActiveMQ入门实例中我们实现了消息的异步传送,这篇博文将如何在spr ...

  8. Quartz在Spring中动态设置cronExpression (spring设置动态定时任务)

    什么是动态定时任务:是由客户制定生成的,服务端只知道该去执行什么任务,但任务的定时是不确定的(是由客户制定).      这样总不能修改配置文件每定制个定时任务就增加一个trigger吧,即便允许客户 ...

  9. Quartz与Spring整合进行热部署的实现(一)

    先来几张实现图 任务管理页 新建任务管理.目前实现叫简单的需求...若各位同学要实现复杂的设计...quartz都有提供强大的支持.小弟目前的需求做到这已经够用了. 接下来.我们如何实现quartz的 ...

随机推荐

  1. 最大公共字串LCS问题(阿里巴巴)

    给定两个串,均由最小字母组成.求这两个串的最大公共字串LCS(Longest Common Substring). 使用动态规划解决. #include <iostream> #inclu ...

  2. print、sp_helptext的限制与扩展

    在SQL中,使用动态SQL是很常见的.有些复杂的计算,或是存储过程,代码很长,中间可能有多次执行SQL语句.而调试拼串的SQL语句却是件痛苦的事,很难看出来运行的语句是什么.所以我会经常使用print ...

  3. php5 数据类型

    一.PHP主要有一下几种数据类型 String(字符串), Integer(整型), Float(浮点型), Boolean(布尔型), Array(数组), Object(对象), NULL(空值) ...

  4. 每秒执行一个shell脚本(转载)

      上周迁移了一台服务器,发现其中一个项目的数据没有更新,查询原服务器的数据,数据有更新,并找到了rsync服务,从其他服务器传输数据,那么如何找到这台服务器?因为是从远程传输到本地,而且不是很频繁, ...

  5. CSS透明代码

    透明往往能产生不错的网页视觉效果,先奉上兼容主流浏览器的CSS透明代码: .transparent_class { filter:alpha(opacity=50); -moz-opacity:0.5 ...

  6. 项目vue2.0仿外卖APP(一)

    最近用vue.js做一个仿饿了么外卖APP的项目,现在也把流程啊什么的暂时先整理一下在这个博客上面. 当然,这个过程会有点长,不过确实能学到很多东西. 话不多说,马上开始吧. 1.项目介绍 选用当前最 ...

  7. linux下 chown命令

    对Document/ 目录下的所有文件与子目录执行相同的所有者变更,修改所有者为users用户组的username用户 chown -R username:users Document/ userna ...

  8. 【MySQL】使用Length和Cast函数计算TEXT类型字段的长度

    背景: 前段时间,业务需要,为了快速让解析的Excel入库,所以把不是很确定的字段全部设置成了TEXT. 今天需要进行表结构优化,把字段长度控制在合适的范围,并尽量不使用TEXT类型. -- 计算长度 ...

  9. Android之界面(布局文件layput)

    1.关于组件居中  ① android:layout_gravity="center" 控件在包含该控件的父控件中的位置.同样,当我们在Button按钮控件中设置android:l ...

  10. input文本框设置和移除默认值

    input文本框设置和移除默认值 这里想实现的效果是:设置和移除文本框默认值,如下图鼠标放到文本框中的时候,灰字消失. 1.可以用简单的方式,就是给input文本框加上onfocus属性,如下代码: ...