Quartz与Spring集成的两种方法示例

目录

Quartz与Spring集成有2种方式:
1.MethodInvokeJobDetailFactoryBean
2.JobDetailBean
下面分别介绍这两种方式。
1.MethodInvokeJobDetailFactoryBean
1)创建一个Job类,此类不需要实现任何接口,不需要继承任何类

public class MyJobTest {    public void execute(){        System.out.println("正在执行quartz任务的一个方法。。。");    }}

2)配置XML

<!-- 第一种集成方式:MethodInvokingJobDetailFactoryBean,并且job类,直接是pojo类,与普通类没有区别 -->    <!-- 定义具体的任务类 -->    <bean id="myJob" class="com.high.quartz.MyJobTest" />    <!-- 定义JobDetail -->    <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">        <!-- 目标类 -->        <property name="targetObject" ref="myJob" />        <!-- 目标类中要执行的方法,这个参数是必须的 -->        <property name="targetMethod" value="execute" />    </bean>    <!-- 定义simpleTrigger触发器 -->    <bean id="simpleTaskTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">        <!-- 延迟10秒启动,然后每隔3秒执行一次,一共执行8次 -->        <property name="jobDetail" ref="jobDetail" />        <property name="repeatCount" value="8" />        <property name="startDelay" value="10000" />        <property name="repeatInterval" value="3000" />    </bean>    <!-- 定义cronTrigger触发器 -->    <bean id="cronTaskTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">        <property name="jobDetail" ref="jobDetail" />        <!-- 下午4点25分开始,每5秒执行一次 -->        <property name="cronExpression" value="0/5 25 16 ? * *" />    </bean>    <!-- 设置调度 -->    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">        <property name="triggers">            <ref bean="cronTaskTrigger" />        </property>    </bean>

2.JobDetailBean
1)需要继承QuartzJobBean类或者实现Job方法

public class MyJobBeanTest extends QuartzJobBean {    @Override    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {        System.out.println("测试Quartz:Hello Quartz");    }}

2)配置XML

<!-- 第二种配置方式,需要继承QuartzJobBean -->    <!-- jobClass关联到一个继承自QuartzJobBean的类,它实现了Quartz作业接口。调用到这个作业的时候,它的executeInternal将被执行。-->    <bean id="jobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">        <property name="jobClass" value="com.high.quartz.MyJobBeanTest" />        <property name="durability" value="true" />    </bean>    <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">        <property name="jobDetail" ref="jobDetail" />        <property name="startDelay" value="3000" />        <property name="repeatInterval" value="2000" />    </bean>    <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">        <property name="jobDetail" ref="jobDetail" />        <property name="cronExpression" value="0/5 46 16 ? * *" />    </bean>    <!-- 总管理类,如果lazy-init='false' 那么容器启动就会指定调度程序 -->    <bean id="startQuartz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">        <!-- 管理trigger -->        <property name="triggers">            <list>                <ref bean="cronTrigger" />            </list>        </property>    </bean>

3.两种集成方式的简单说明
1)使用MethodInvokeJobDetailFactoryBean则需要指定targetObject(任务实例)和targetMethod(实例中要执行的方法)
2)使用QuartzJobBean,需要继承。
前者优点是无侵入,业务逻辑简单,一目了然,缺点是无法持久化。
从我使用的经验来说,我更推荐的第二种,其中一个很重要的原因就是因为定时任务中注入相关Service的时候,后者可以直接注入,而前者还需要进行Scheduler的替换修改。

以上就是Quartz与Spring集成的两种方法示例的详细内容,更多关于Quartz与Spring集成方法的资料请关注我们其它相关文章!

(0)

相关推荐

  • SpringBoot与Quartz集成实现分布式定时任务集群的代码实例

    Spring Boot与Quartz集成实现分布式定时任务集群 直接贴代码 POM <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xs

  • Spring集成Quartz的简单配置的方法

    不过在实际的工作中,很少会直接用到它.通常都是用的spring-quartz组件,直接通过配置,让spring框架来自动装配 如下就是spring框架集成quartz组件,配置定时任务的方法 1. Maven依赖 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.0

  • Spring Boot集成Quartz注入Spring管理的类的方法

    在Spring Boot中使用Quartz时,在JOB中一般需要引用Spring管理的Bean,通过定义Job Factory实现自动注入. Spring有自己的Schedule定时任务,在Spring boot中使用的时候,不能动态管理JOB,于是就使用Quartz来实现. 在Spring Boot中配置Quartz: import java.io.IOException; import java.util.Properties; import org.springframework.bean

  • SpringBoot集成Quartz实现定时任务的方法

    1 需求 在我的前后端分离的实验室管理项目中,有一个功能是学生状态统计.我的设计是按天统计每种状态的比例.为了便于计算,在每天0点,系统需要将学生的状态重置,并插入一条数据作为一天的开始状态.另外,考虑到学生的请假需求,请假的申请往往是提前做好,等系统时间走到实际请假时间的时候,系统要将学生的状态修改为请假. 显然,这两个子需求都可以通过定时任务实现.在网上略做搜索以后,我选择了比较流行的定时任务框架Quartz. 2 Quartz Quartz是一个定时任务框架,其他介绍网上也很详尽.这里要介

  • SpringBoot2.6.3集成quartz的方式

    quartz使用 quartz启动需要数据库有很多表的支持,这些表的建表脚本可以通过如下方式找到 如何找到quartz的数据库脚本在这里下载,需要注意的是下载2.2.3这个版本,不知道为什么高版本的反而没有,真是佛了 集成Springboot 代码yml配置 spring: application: name: demo-excel datasource: url: jdbc:mysql://rm-xxx.mysql.rds.aliyuncs.com:3306/quartz_demo?zeroD

  • 详解Quartz 与 Spring框架集成的三种方式

    XML+ Spring MVC 版本 POM文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd

  • 浅谈SpringBoot集成Quartz动态定时任务

    SpringBoot自带schedule 沿用的springboot少xml配置的优良传统,本身支持表达式等多种定时任务 注意在程序启动的时候加上@EnableScheduling @Scheduled(cron="0/5 * * * * ?") public void job(){ System.out.println("每五秒执行一次"); } 为什么要使用Quartz 多任务情况下,quartz更容易管理,可以实现动态配置 执行时间表达式: 表达式示例: 集成

  • Quartz与Spring集成的两种方法示例

    目录 Quartz与Spring集成有2种方式:1.MethodInvokeJobDetailFactoryBean2.JobDetailBean下面分别介绍这两种方式.1.MethodInvokeJobDetailFactoryBean1)创建一个Job类,此类不需要实现任何接口,不需要继承任何类 public class MyJobTest { public void execute(){ System.out.println("正在执行quartz任务的一个方法..."); }}

  • 使用POST方式弹出窗口的两种方法示例介绍

    最近在做一个功能需要弹窗,但是不能用get方式,因为get方式对url的长度有限制,所以必须用post,总结了两个方法 1. 复制代码 代码如下: var $form1=$("<form action='"+url+"' id='f' name='f' method='post'></form>"); $form1.append($("<input type='hidden' name='"+i+"' va

  • Python实现删除排序数组中重复项的两种方法示例

    本文实例讲述了Python实现删除排序数组中重复项的两种方法.分享给大家供大家参考,具体如下: 对于给定的有序数组nums,移除数组中存在的重复数字,确保每个数字只出现一次并返回新数组的长度 注意:不能为新数组申请额外的空间,只允许申请O(1)的额外空间修改输入数组 Example 1: Given nums = [1,1,2], Your function should return length = 2, with the first two elements of nums being 1

  • Java实现对象按照其属性排序的两种方法示例

    本文实例讲述了Java实现对象按照其属性排序的两种方法.分享给大家供大家参考,具体如下: 有时候需要对对象列表或数组进行排序,下面提供两种简单方式: 方法一:将要排序的对象类实现Comparable<>接口. 首先,创建学生类,我们将根据学生成绩对学生进行排序: /** * 学生类 */ class Student implements Comparable<Student>{ String name; int age; int score; public Student(Stri

  • MySQL过滤重复数据的两种方法示例

    目录 方法1:加关键字 DISTINCT 方法2:用GROUP By 分组 最后 方法1:加关键字 DISTINCT 在mysql中,可以利用“SELECT”语句和“DISTINCT”关键字来进行去重查询,过滤掉重复的数据,语法“SELECT DISTINCT 字段名 FROM 数据表名;”. DISTINCT 关键字的语法格式为: SELECT DISTINCT <字段名> FROM <表名>; 其中,“字段名”为需要消除重复记录的字段名称,多个字段时用逗号隔开. 示例 -- 示

  • mongoose更新对象的两种方法示例比较

    前言 Mongoose是在node.js异步环境下对mongodb进行便捷操作的对象模型工具 那么要使用它,首先你得装上node.js和mongodb,关于mongodb的安装和操作介绍可以参考:http://www.jb51.net/article/80296.htm 演示 描述场景 更新购物车数量与勾选状态 业务逻辑 查询到当前用户的购物车对象Cart,更新前端传递过来的quantity与selected字段 方法一 var _ = require('underscore'); Cart.f

  • 设置php页面编码的两种方法示例介绍

    1:输出meta标签: 1.在php mvc的控制器里面或php页面echo '<meta http-equiv="content-type" content="text/html; charset=utf-8">'; 2.在php页面或html页面<meta http-equiv="content-type" content="text/html; charset=utf-8"> 2:使用header

  • Spring Data JPA实现动态查询的两种方法

    前言 一般在写业务接口的过程中,很有可能需要实现可以动态组合各种查询条件的接口.如果我们根据一种查询条件组合一个方法的做法来写,那么将会有大量方法存在,繁琐,维护起来相当困难.想要实现动态查询,其实就是要实现拼接SQL语句.无论实现如何复杂,基本都是包括select的字段,from或者join的表,where或者having的条件.在Spring Data JPA有两种方法可以实现查询条件的动态查询,两种方法都用到了Criteria API. Criteria API 这套API可用于构建对数据

  • Spring整合Struts2的两种方法小结

    spring提供了一个ContextLoaderListener,该监听类实现了ServletContextListener接口.该类可以作为Listener使用,它会在创建时自动查找WEB-INF/下的applicationContext.xml文件,因此如果只有一个配置文件且配置文件命名为applicationContext.xml,则只需在web.xml文件中增加如下配置片段: <!-- 使用ContextLoaderListener初始化Spring容器 --> <listene

  • spring boot @ResponseBody转换JSON 时 Date 类型处理方法【两种方法】

    spring boot @ResponseBody转换JSON 时 Date 类型处理方法[两种方法],Jackson和FastJson两种方式. spring boot @ResponseBody转换JSON 时 Date 类型处理方法 ,这里一共有两种不同解析方式(Jackson和FastJson两种方式) 第一种方式:默认的json处理是 jackson 也就是对configureMessageConverters 没做配置时 mybatis数据查询返回的时间,是一串数字,如何转化成时间.

随机推荐