Quartz 定时任务(Scheduler)的 3 种实现方式
发布时间 - 2025-07-09 00:00:00 点击率:次以下是关于 quartz 定时任务(scheduler)的三种实现方式的伪原创文章内容:
Quartz 定时任务(Scheduler)的三种实现方式
一、引入依赖包
首先,需要在项目中引入必要的 JAR 包。这些包包括 Spring 框架和 Quartz 调度器的相关依赖。
org.springframework spring-context-supportorg.quartz-scheduler quartz2.2.1 org.quartz-scheduler quartz-jobs2.2.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"); } }
- 声明定时任务并关联业务实现类
在
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); } } }
- 运行成功
三、实现方式二
- 定义定时任务的业务逻辑
与实现方式一相同,定义一个实现了
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"); } }
- 定义定时任务的触发类,调用业务类中的实现
创建一个触发类,用于调用业务类中的实现。
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");
}}
- 在配置文件中配置触发类和任务执行频率
在配置文件中设置触发类和任务的执行频率。
- 运行成功
四、实现方式三
- 引入依赖包
与实现方式一相同,引入必要的 JAR 包。
- 在运行类中添加两个注解
在运行类中添加 @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"); } }
- 运行效果
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滤镜与图像增强 如何用花生壳三步快速搭建专属网站?


