【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 关系型数据库 MySQL
SpringBoot 集成 Quartz + MySQL
SpringBoot 集成 Quartz + MySQL
127 1
|
7月前
|
SQL API 调度
Springboot2.4.5集成Quartz实现动态任务数据持久化-不怕重启服务
Springboot2.4.5集成Quartz实现动态任务数据持久化-不怕重启服务
294 0
|
7月前
|
Java API 调度
Web后端Javaee企业级开发之定时任务 Springboot整合任务框架Quartz和Task详解
Web后端Javaee企业级开发之定时任务 Springboot整合任务框架Quartz和Task详解
96 0
|
8月前
|
存储 数据可视化 安全
Java全套智慧校园系统源码springboot+elmentui +Quartz可视化校园管理平台系统源码 建设智慧校园的5大关键技术
智慧校园指的是以物联网为基础的智慧化的校园工作、学习和生活一体化环境,这个一体化环境以各种应用服务系统为载体,将教学、科研、管理和校园生活进行充分融合。无处不在的网络学习、融合创新的网络科研、透明高效的校务治理、丰富多彩的校园文化、方便周到的校园生活。简而言之,“要做一个安全、稳定、环保、节能的校园。
138 6
|
8月前
|
Java Spring 容器
SpringBoot 使用Quartz执行定时任务对象时无法注入Bean问题
SpringBoot 使用Quartz执行定时任务对象时无法注入Bean问题
298 1
|
8月前
|
存储 NoSQL Java
【十】springboot整合quartz实现定时任务优化
【十】springboot整合quartz实现定时任务优化
127 0
|
8月前
|
SQL Java 调度
SpringBoot集成quartz定时任务trigger_state状态ERROR解决办法
SpringBoot集成quartz定时任务trigger_state状态ERROR解决办法
|
8月前
|
XML Java API
Spring Boot 整合 Quartz 实现 Java 定时任务的动态配置
Spring Boot 整合 Quartz 实现 Java 定时任务的动态配置
209 0
|
8月前
|
SQL 分布式计算 Java
SpringBoot集成quartz调度linkis任务
SpringBoot集成quartz调度linkis任务
|
8月前
|
Java 调度
SpringBoot中实现定时任务(Quartz)(二)
SpringBoot中实现定时任务(Quartz)
72 0
SpringBoot中实现定时任务(Quartz)(二)