【Quartz】——与spring整合

简介: 【Quartz】——与spring整合

引言

 

像这样的比较常用的技术,肯定是被我们spring这个大神进行整合过的,因为这些东西一旦和sprig 整合之后,我们自己编写的代码就比较少了,提高了开发效率,下面看整合的过程。

 

引入依赖


  <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>4.0.6.RELEASE</version>
    </dependency>

这个包的作用是什么呢?这个jar 文件包含支持UI模版(Velocity,FreeMarker,JasperReports),邮件服务,脚本服务(JRuby),缓存Cache(EHCache),任务计划Scheduling(uartz)方面的类。

外部依赖spring-context, (spring-jdbc, Velocity, FreeMarker, JasperReports, BSH, Groovy, JRuby, Quartz, EHCache

 

编写Job代码

package cn.itcast.quartz;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.context.ApplicationContext;
import org.springframework.scheduling.quartz.QuartzJobBean;
/**
 * 
 * 
 */
public class MyJob extends QuartzJobBean {
    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        System.out.println("myJob 执行了............." + context.getTrigger().getKey().getName());
        ApplicationContext applicationContext = (ApplicationContext) context.getJobDetail().getJobDataMap()
                .get("applicationContext");
        System.out.println("获取到的Spring容器是: " + applicationContext);
    }
}


和入门程序对比,这个job中的代码显然少了很多,其中我们需要关注的一点就是,我们继承了一个QuartzJobBean,这个是spring 给我提供的包中的一个类,我们只需要重写里面的一个executeInternal即可。

 

spirng配置文件的编写


  <!-- 定义任务bean -->
  <bean name="myJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
    <!-- 指定具体的job类 -->
    <property name="jobClass" value="cn.itcast.quartz.MyJob" />
    <!-- 指定job的名称 -->
    <property name="name" value="myJob" />
    <!-- 指定job的分组 -->
    <property name="group" value="jobs" />
    <!-- 必须设置为true,如果为false,当没有活动的触发器与之关联时会在调度器中删除该任务  -->
    <property name="durability" value="true"/>
    <!-- 指定spring容器的key,如果不设定在job中的jobmap中是获取不到spring容器的 -->
    <property name="applicationContextJobDataKey" value="applicationContext"/>
  </bean>
  <!-- 定义触发器 -->
  <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="jobDetail" ref="myJobDetail" />
    <!-- 每一分钟执行一次 -->
    <property name="cronExpression" value="0/5 * * * * ?" />
  </bean>
  <!-- 定义触发器 -->
  <!-- 演示:一个job可以有多个trigger; -->
  <!-- <bean id="cronTrigger2" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="jobDetail" ref="myJobDetail" />
    每一分钟执行一次
    <property name="cronExpression" value="0 */1 * * * ?" />
  </bean> -->
  <!-- 定义调度器 -->
  <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
      <property name="triggers">
          <list>
              <ref bean="cronTrigger" />
             <!--  <ref bean="cronTrigger2" /> -->
          </list>
      </property>
  </bean>

入口类编写

package cn.itcast.quartz;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
  //初始化spring容器
  public static void main(String[] args) {
    new ClassPathXmlApplicationContext("classpath:applicationContext-scheduler.xml");
  }
}


这个时候只要我们启动spring容器后,定时任务就是按照我们编写的频率和job自动执行。

 

当我们和spring进行整合以后,我们的开发变得非常的简单,但是这里有两个问题:


一个job能否多个trigger?  可以在上面代码中我们已经进行了测试,同时将一个job添加到多个trigger中是没有问题的,代码如上。


一个trigger能否多个job?  不可以


小结


定时任务在在实际项目中用的还是非常多的,并且在互联网项目中这中需求更是常见,所以我们需要掌握类似Quartz,elastic-job这样的任务调度的框架的开发!


下面博客将介绍电商项目中,如何用Quartz解决超时订单问题!

目录
相关文章
|
5月前
|
Java Spring
spring集成Quartz时区问题造成任务晚执行八小时
spring集成Quartz时区问题造成任务晚执行八小时
|
8月前
|
Java 数据库连接 数据库
quartz(四)如何在job中使用spring自动注入
quartz(四)如何在job中使用spring自动注入
98 0
|
Java 调度
Springboot 使用Quartz定时器执行多个定时任务 配置篇
Springboot 使用Quartz定时器执行多个定时任务 配置篇
625 0
Springboot 使用Quartz定时器执行多个定时任务 配置篇
|
Oracle NoSQL Java
Springboot Quartz定时任务的动态调度使用,实战详解
Springboot Quartz定时任务的动态调度使用,实战详解
472 0
Springboot Quartz定时任务的动态调度使用,实战详解
|
Java Spring
Quartz - Quartz之Spring整合篇
Quartz - Quartz之Spring整合篇
108 0
Quartz - Quartz之Spring整合篇
|
XML Java 调度
JAVA | Spring + quartz 实现定时任务
很久不见,因为忙着泡妞,断更了一个月,实在是罪过。废话不多说,最近在工作中遇到了使用 quartz 实现定时任务的需求。写出来分享给大家,权当笔记。
JAVA | Spring + quartz 实现定时任务
|
开发框架 Java 应用服务中间件
spring整合quartz框架
在一些项目中,往往需要定时的去执行一些任务,比如商城项目,每天0点去统计前一天的销量。那么如何实现呢,总不可能我们每天0点手动的去执行统计销量的方法吧,这时就quartz就起作用了。
spring整合quartz框架
|
Java BI 调度
23、springboot集成quartz
spring支持多种定时任务的实现,今天介绍一下spring定时器和quartz定时器的使用。
183 0
23、springboot集成quartz
|
Java 调度 Spring
Spring定时任务的实现:Quartz
Spring定时任务的实现:Quartz
139 0
Spring定时任务的实现:Quartz
|
存储 负载均衡 Java
实战 | 使用Spring Boot + Quartz 实现分布式定时任务平台
本文将从项目实战出发来介绍分布式定时任务的实现。在某些应用场景下要求任务必须具备高可用性和可扩展性,单台服务器不能满足业务需求,这时就需要使用Quartz实现分布式定时任务。
实战 | 使用Spring Boot + Quartz  实现分布式定时任务平台