Quartz 定时任务(Scheduler)的 3 种实现方式

发布时间 - 2025-07-09 00:00:00    点击率:

以下是关于 quartz 定时任务(scheduler)的三种实现方式的伪原创文章内容:


Quartz 定时任务(Scheduler)的三种实现方式

一、引入依赖包

首先,需要在项目中引入必要的 JAR 包。这些包包括 Spring 框架和 Quartz 调度器的相关依赖。


    org.springframework
    spring-context-support


    org.quartz-scheduler
    quartz
    2.2.1


    org.quartz-scheduler
    quartz-jobs
    2.2.1

二、实现方式一

  1. 定义定时任务的业务逻辑

首先,定义一个实现了 Job 接口的类,用于执行定时任务的具体业务逻辑。

package gentle.test;

import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import java.util.Date;

/**

  • @author silence

  • @date 2018/7/17 11:37 */ @Service("show") public class Show implements Job { private static Logger _log = LoggerFactory.getLogger(Show.class);

    @Override public void execute(JobExecutionContext arg0) throws JobExecutionException { _log.info("\n\n-------------------------------\n " + "It is running and the time is : " + new Date() + "\n-------------------------------\n"); } }

  1. 声明定时任务并关联业务实现类

JobDetail jb = JobBuilder.newJob(Show.class) 中,关联业务类。

package gentle.test;

import org.quartz.*; import org.quartz.impl.StdSchedulerFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import java.util.Date;

/**

  • @author silence

  • @date 2018/7/17 11:36 */ @Service("schedulerTest") public class SchedulerTest { private static Logger _log = LoggerFactory.getLogger(Scheduler.class);

    public static void main(String[] args) { try { // 1. 创建 Scheduler 的工厂 SchedulerFactory sf = new StdSchedulerFactory(); // 2. 从工厂中获取调度器实例 Scheduler scheduler = sf.getScheduler(); // 3. 创建 JobDetail JobDetail jb = JobBuilder.newJob(Show.class) // Show 为一个 job,是要执行的一个任务。 .withDescription("这是我的测试定时任务。") // job 的描述 .withIdentity("jy2Job", "jy2Group") // job 的 name 和 group .build(); // 任务运行的时间,SimpleSchedle 类型触发器有效 long time = System.currentTimeMillis() + 3 1000L; // 3 秒后启动任务 Date statTime = new Date(time); // 4. 创建 Trigger // 使用 SimpleScheduleBuilder 或者 CronScheduleBuilder Trigger t = TriggerBuilder.newTrigger() .withDescription("") .withIdentity("jyTrigger", "jyTriggerGroup") //.withSchedule(SimpleScheduleBuilder.simpleSchedule()) .startAt(statTime) // 默认当前时间启动 , 也可以写为:.startNow(); .withSchedule(CronScheduleBuilder.cronSchedule("0/2 * ?")) // 每两秒执行一次 .build(); // 5. 注册任务和定时器 scheduler.scheduleJob(jb, t); // 6. 启动调度器 scheduler.start(); _log.info("启动时间 : " + new Date()); } catch (Exception e) { _log.info("定时任务出现异常 : " + e); } } }

  1. 运行成功

三、实现方式二

  1. 定义定时任务的业务逻辑

与实现方式一相同,定义一个实现了 Job 接口的类,用于执行定时任务的具体业务逻辑。

package gentle.test;

import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import java.util.Date;

/**

  • @author silence

  • @date 2018/7/17 11:37 */ @Service("show") public class Show implements Job { private static Logger _log = LoggerFactory.getLogger(Show.class);

    @Override public void execute(JobExecutionContext arg0) throws JobExecutionException { _log.info("\n\n-------------------------------\n " + "It is running and the time is : " + new Date() + "\n-------------------------------\n"); } }

  1. 定义定时任务的触发类,调用业务类中的实现

创建一个触发类,用于调用业务类中的实现。

package gentle.test;

import org.quartz.JobExecutionException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.annotation.Resource; import java.text.SimpleDateFormat; import java.util.Date;

public class UserSyncTask { private final Logger logger = LoggerFactory.getLogger(this.getClass());

@Resource
Show show;

public void cronDepartmentsAndUsersJob() {
    logger.info("\n\n 定时--开始,当前时间: " + dateFormat().format(new Date()));
    try {
        show.execute(null);
    } catch (JobExecutionException e) {
        e.printStackTrace();
    }
    logger.info("\n\n 定时--结束,当前时间:" + dateFormat().format(new Date()));
}

private SimpleDateFormat dateFormat() {
    return new SimpleDateFormat("HH:mm:ss");
}

}

  1. 在配置文件中配置触发类和任务执行频率

在配置文件中设置触发类和任务的执行频率。






  1. 运行成功

四、实现方式三

  1. 引入依赖包

与实现方式一相同,引入必要的 JAR 包。

  1. 在运行类中添加两个注解

在运行类中添加 @EnableScheduling@Scheduled 注解。

package gentle.test;

import gentle.util.DateUtil; import org.slf4j.LoggerFactory; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.Date;

/**

  • 定时任务 -- 简版

  • @author silence

  • @date 2018/7/31 16:03 */ @Component // 注册为一个 bean @EnableScheduling // 开启定时器 public class Sender { private final org.slf4j.Logger logger = LoggerFactory.getLogger(this.getClass());

    @Scheduled(fixedDelay = 2000) // 每 2s 执行一次。 public void send() { logger.info(" \n------------------------\n " + "定时任务内容 :" + DateUtil.dateFormat().format(new Date()) + "\n------------------------\n"); } }

  1. 运行效果

PS:第三种实现方式最为简单。

源码地址:定时任务demo



# linux  # ai  # spring  # 接口  # class  # 类中  # 三种  # 配置文件  # 这是  # 实现了  # 创建一个  # 第三种  # running  # time  # info 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  php 三元运算符实例详细介绍  如何获取PHP WAP自助建站系统源码?  动图在线制作网站有哪些,滑动动图图集怎么做?  EditPlus中的正则表达式 实战(4)  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  北京网站制作公司哪家好一点,北京租房网站有哪些?  Laravel怎么判断请求类型_Laravel Request isMethod用法  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  如何在建站主机中优化服务器配置?  JavaScript中的标签模板是什么_它如何扩展字符串功能  怎么用AI帮你为初创公司进行市场定位分析?  Laravel如何创建自定义Artisan命令?(代码示例)  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  中山网站推广排名,中山信息港登录入口?  香港服务器如何优化才能显著提升网站加载速度?  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程  如何快速搭建高效简练网站?  微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  如何在 Pandas 中基于一列条件计算另一列的分组均值  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  Laravel怎么连接多个数据库_Laravel多数据库连接配置  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  教你用AI将一段旋律扩展成一首完整的曲子  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  Laravel安装步骤详细教程_Laravel环境搭建指南  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  WEB开发之注册页面验证码倒计时代码的实现  如何快速上传自定义模板至建站之星?  Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】  Laravel如何使用.env文件管理环境变量?(最佳实践)  中山网站制作网页,中山新生登记系统登记流程?  大同网页,大同瑞慈医院官网?  如何快速查询网站的真实建站时间?  如何在云主机快速搭建网站站点?  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  Bootstrap整体框架之CSS12栅格系统  MySQL查询结果复制到新表的方法(更新、插入)  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  Python图片处理进阶教程_Pillow滤镜与图像增强  如何用花生壳三步快速搭建专属网站?