Spring整合Quartz(七)下

简介: Spring整合Quartz(七)下

三. Spring 创建任务Bean 实现整合 Quartz 框架

Spring 可以通过两种方式,来创建 任务Bean


  1. 继承 QuartzJobBean 类,用JobDetailFactoryBean 进行生成


  1. 创建普通java 对象和任务方法,用 MethodInvokingJobDetailFactoryBean 进行生成


下面,分别对这两种方式进行演示。


三.一 继承 QuartzJobBean 类

三.一.一 创建任务

/**
 * 
 * @author 两个蝴蝶飞
 * 
 * 通过继承 QuartzJobBean 来创建作业任务Bean 
 *
 */
public class MyJob3 extends QuartzJobBean{
  @Override
  protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
  //要做的事,是打印当前的时间 
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //格式化时间
        String dateString=sdf.format(new Date());
        System.out.println("QuartzJobBean 备份数据库的时间是:"+dateString);  
        //可以通过 context 对象来获取一些重要信息 
  }
}


其实 QuartzJobBean 内部 自己实现了 Job 接口, 然后 通过重写 executeInternal()方法来代替以前的 execute()方法。

image.png


三.一.二 编写配置文件 spring-quartz3.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.MyJob3"></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="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
      <property name="triggers">
      <list>
        <ref bean="trigger1"/>
      </list>
      </property>
    </bean>


与 二.四.一 部分的配置文件内容一样。


三.一.三 测试类进行测试查看

编写 JobTest3 测试类

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_quartz3.xml")
public class JobTest3 {
  @Test
  public void test3(){
  System.out.println("继承QuartzJobBean 是否运行任务呢?"); 
  try {
    Thread.sleep(10000);
  } catch (InterruptedException e) {
    // TODO 自动生成的 catch 块
    e.printStackTrace();
  }
  }
}


运行,控制台打印输出:

image.png


三.二 普通Java 对象和任务方法

三.二.一 创建任务

/**
 * 
 * @author 两个蝴蝶飞
 * 普通的Java 类,普通的方法
 */
public class MyJob4 {
  public void myExecute(){
  //要做的事,是打印当前的时间 
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //格式化时间
        String dateString=sdf.format(new Date());
        System.out.println("MethodInvoking 备份数据库的时间是:"+dateString); 
        //如果要传递数据的话,需要自己在生成jobDetail时进行配置
  }
}


三.二.二 配置文件 spring-quartz4.xml

用 MethodInvokingJobDetailFactoryBean 来创建相应的JobDetail.


用 targetObject 和 targetMethod 属性来指定 哪一个类的哪一个方法。

<!-- 定义 JobDetail, 所用的bean 为 MethodInvokingJobDetailFactoryBean -->
    <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
      <!-- 任务名 -->
      <property name="name" value="job1"></property>  
      <!-- 组名 -->
      <property name="group" value="group1"></property>
      <!--是否同步-->
      <property name="concurrent" value="true"></property>
      <!-- 哪一个任务 -->
      <property name="targetObject">
      <bean class="com.yjl.job.MyJob4"></bean>
      </property>
      <!-- 哪一个方法 -->
      <property name="targetMethod" value="myExecute"></property>
    </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>


三.二.三 测试文件测试

编写 JobTest4.java 测试类

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_quartz4.xml")
public class JobTest4 { 
  @Test
  public void test4(){
  System.out.println("自定义类和方法是否运行任务呢?");  
  try {
    Thread.sleep(10000);
  } catch (InterruptedException e) {
    // TODO 自动生成的 catch 块
    e.printStackTrace();
  }
  }
}

image.png


注意,此时是先输出语句,再运行6次。


这就是 Spring 整合 Quartz框架的几种方式,老蝴蝶强烈建议使用第3种,继承 QuartzJobBean的方式。

相关文章
|
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)(二)