Spring整合Quartz(七)中

简介: Spring整合Quartz(七)中

二. 将 Quartz 框架整合到 Spring 项目里面

二.一 在 pom.xml 中添加 关于 quartz的依赖

<!-- quartz的 jar包 -->
<dependency>
  <groupId>org.quartz-scheduler</groupId>
  <artifactId>quartz-jobs</artifactId>
  <version>2.3.2</version>
</dependency>
<dependency>
  <groupId>org.quartz-scheduler</groupId>
  <artifactId>quartz</artifactId>
  <version>2.3.2</version>
</dependency>


二.二 编写作业任务 MyJob.java

MyJob.java

package com.yjl.job;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
/**
 * 
 * @author 两个蝴蝶飞
 *
 *Quartz框架方式 创建任务
 */
public class MyJob implements Job{
  @Override
  public void execute(JobExecutionContext context) throws JobExecutionException {
  //要做的事,是打印当前的时间 
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //格式化时间
        String dateString=sdf.format(new Date());
        System.out.println("普通Job 备份数据库的时间是:"+dateString);  
  }
}


二.三 简单触发器 SimpleTrigger 触发

二.三. 一 在resource 目录下 创建 quartz 的配置文件 spring-quartz2.xml

(用的是2,而不是1, 是因为老蝴蝶测试时先测试的Cron表达式,后面才添加的简单触发器形式。)


spring-quartz2.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:context="http://www.springframework.org/schema/context"
  xmlns:mvc="http://www.springframework.org/schema/mvc"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation=" 
       http://www.springframework.org/schema/beans  
       http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
       http://www.springframework.org/schema/context  
       http://www.springframework.org/schema/context/spring-context-4.0.xsd  
       http://www.springframework.org/schema/mvc  
       http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd  
        ">
     <!-- 定义 JobDetail, 所用的bean 为 JobDetailFactoryBean -->
    <bean id="jobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">    
      <!-- 任务名 -->
      <property name="name" value="job1"></property>  
      <!-- 组名 -->
      <property name="group" value="group1"></property>
      <!-- 关联任务 --> 
      <property name="jobClass" value="com.yjl.job.MyJob"></property>
      <!-- 必须是true, 如果是false的话,当这个jobDetail没有被Trigger关联时,会删除 -->
      <property name="durability" value="true"></property>
      <!-- 还有一个重要的 applicationContextJobDataKey 属性,这一章节先不讲解-->
    </bean> 
    <!-- 配置一个简单的触发器 -->   
    <bean id="trigger1" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
      <!-- 触发器名称 -->
      <property name="name" value="name1"></property>
      <!-- 组名称 -->
      <property name="group" value="group1"></property>
      <!-- 开启的延迟时间,如果为0 就是 startNow() -->
      <property name="startDelay" value="0"></property>
      <!-- 运行次数 -->
      <property name="repeatCount" value="3"></property>
      <!-- 运行间隔,毫秒为单位 -->
      <property name="repeatInterval" value="3000"></property>
      <!-- 关联哪一个 任务, 直接放置到触发器里面 -->
      <property name="jobDetail" ref="jobDetail"></property>
    </bean>
    <!-- 配置 scheduler 调度器 -->
    <bean id="scheduler1" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
      <property name="triggers">
      <list>
        <!-- 是集合,可以配置多个 触发器。 触发器里面为jobDetail,在Scheduler里面就不配置了-->
        <ref bean="trigger1"/>
      </list>
      </property>
    </bean>
</beans>


二.三.二 把 quartz配置文件放置到 springmvc.xml 中引用

在springmvc.xml 中,引入 spring-quartz2.xml 文件

<!-- bean组件扫描 -->    
<context:component-scan base-package="com.yjl.action.quartz" />
<!-- 引入包含 quartz.xml -->
<import resource="classpath*:spring_quartz2.xml"/>


二.三.三 重启服务器,进行测试

image.png


当服务器一启动时,就自动执行任务。 共执行四次(刚开始一次+设置的3次, 共4次)


二.三.四 测试类进行测试查看

创建一个测试类 JobTest2 进行测试

package com.yjl.test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
//引入配置文件 
@ContextConfiguration("classpath*:spring_quartz2.xml")
public class JobTest2 {
  @Test
  public void test2(){
  System.out.println("SimpleTrigger 是否运行任务呢?");
  //需要休眠10s后,再关闭。 不然启动测试后直接关闭,看不出效果。
  try {
    Thread.sleep(10000);
  } catch (InterruptedException e) {
    // TODO 自动生成的 catch 块
    e.printStackTrace();
  }
  }
}

image.png


正常运行4次,与服务器启动时效果一致。


(接下来均用 测试类进行测试,不用服务器启动测试)


二.四 Cron 触发器 CronTrigger 触发


关于 cron 触发器的强大之处和简单触发器的不足,前面已经比较过了,老蝴蝶这儿就不再写了。


依赖和 作业任务 MyJob.java 均不变。


二.四.一 配置 cron 触发器的配置文件 spring-quartz.xml

<!-- 定义 JobDetail, 所用的bean 为 JobDetailFactoryBean -->
    <bean id="jobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">  
      <!-- 任务名 -->
      <property name="name" value="job1"></property>  
      <!-- 组名 -->
      <property name="group" value="group1"></property>
      <!-- 关联任务 --> 
      <property name="jobClass" value="com.yjl.job.MyJob"></property>
      <!-- 必须是true, 如果是false的话,当这个jobDetail没有被Trigger关联时,会删除 -->
      <property name="durability" value="true"></property>
      <!-- 还有一个重要的 applicationContextJobDataKey 属性,这一章节先不讲解-->
    </bean> 
    <!-- 定义 cron 触发器 -->
    <bean id="trigger1" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
      <!-- 配置触发器的名称 -->
      <property name="name" value="trigger1"></property>
      <!-- 配置触发器的组名 -->
      <property name="group" value="group1"></property>
      <!-- 配置关联的 JobDetail -->
      <property name="jobDetail" ref="jobDetail"></property>
      <!-- 配置 cron 表达式 ,每2秒触发一次-->
      <property name="cronExpression" value="0/2 * * * * ?"></property>
    </bean>
    <!-- 配置 scheduler 调度器 -->
    <bean id="scheduler1" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
      <property name="triggers">
      <list>
        <ref bean="trigger1"/>
      </list>
      </property>
    </bean>

 

二.四.二 测试类进行测试查看

创建一个测试类 JobTest 进行测试

package com.yjl.test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
//引入配置文件 
@ContextConfiguration("classpath*:spring_quartz.xml")
public class JobTest {
  @Test
  public void test(){
  System.out.println("CronTrigger 是否运行任务呢?");
  //需要休眠10s后,再关闭。 不然启动测试后直接关闭,看不出效果。
  try {
    Thread.sleep(10000);
  } catch (InterruptedException e) {
    // TODO 自动生成的 catch 块
    e.printStackTrace();
  }
  }
}



运行程序,控制台打印输出


image.png

cron 表达式配置成功。


上面的任务调度 MyJob, 需要实现 Job 接口, 准确地来说,还是 Quartz 框架自己创建的, 能不能让 Spring 创建呢?

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