上一篇将了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啦。

最新文章

  1. ORACLE_UNQNAME
  2. 关于AlertDialog.Builder(Context context)中所应传入的context
  3. 【maven】 maven的setting.xml文件的详解
  4. Apache Kafka 分布式消息队列中间件安装与配置 转载
  5. Mac下java编译乱码(适用于maven , ant)
  6. 我的MYSQL学习心得
  7. play wav sound
  8. [转载]windows下安装Python虚拟环境virtualenvwrapper-win
  9. codecomb 2086【滑板鞋】
  10. js原型与原型链探究
  11. vue-router路径计算问题
  12. 常见设计模式 (python代码实现)
  13. android------DDMS files not found: tools\hprof-conv.exe
  14. Linux Performance Analysis and Tools(Linux性能分析和工具)
  15. 1925: [Sdoi2010]地精部落
  16. nodejs 不支持 typescript (...paramName:any[])剩余参数。变相支持方式。
  17. DB2 Vs MySQL系列 | MySQL与DB2的数据类型对比
  18. 聊聊用CSS3来玩立方体
  19. uva-1636-概率
  20. Linux 命令之权限修改

热门文章

  1. width的数值为百分比
  2. 小知识点总结HTML、CSS、JavaScript(一)
  3. 【Android自学日记】搭建Android开发环境
  4. Android多线程通信机制
  5. JS事件对象与事件委托
  6. 数据库Sharding的基本思想和切分策略
  7. ecshop中foreach的详细用法归纳
  8. Spring Security控制权限
  9. linux连接远程桌面
  10. Qt文件路径分隔符