前言

最近在项目中使用到定时任务,之前一直都是使用Quartz 来实现,最近看Spring 基础发现其实Spring 提供 Spring Schedule 可以帮助我们实现简单的定时任务功能。
下面说一下两种方式在Spring Boot 项目中的使用。
Spring Schedule 实现定时任务
Spring Schedule 实现定时任务有两种方式 1. 使用XML配置定时任务, 2. 使用 @Scheduled 注解。 因为是Spring Boot 项目 可能尽量避免使用XML配置的形式,主要说注解的形式.
Spring Schedule 提供三种形式的定时任务:
固定等待时间 @Scheduled(fixedDelay = 时间间隔 )
@Component
public class ScheduleJobs {
public final static long SECOND = 1 * 1000;
FastDateFormat fdf = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss");
@Scheduled(fixedDelay = SECOND * 2)
public void fixedDelayJob() throws InterruptedException {
TimeUnit.SECONDS.sleep(2);
System.out.println("[FixedDelayJob Execute]"+fdf.format(new Date()));
}
}
固定间隔时间 @Scheduled(fixedRate = 时间间隔 )
@Component
public class ScheduleJobs {
public final static long SECOND = 1 * 1000;
FastDateFormat fdf = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss");
@Scheduled(fixedRate = SECOND * 4)
public void fixedRateJob() {
System.out.println("[FixedRateJob Execute]"+fdf.format(new Date()));
}
}
Corn表达式 @Scheduled(cron = Corn表达式)
@Component
public class ScheduleJobs {
public final static long SECOND = 1 * 1000;
FastDateFormat fdf = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss");
@Scheduled(cron = "0/4 * * * * ?")
public void cronJob() {
System.out.println("[CronJob Execute]"+fdf.format(new Date()));
}
}
Spring Boot 整合 Quartz 实现定时任务
添加Maven依赖
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
Spring Boot 整合 Quartz
Spring 项目整合 Quartz 主要依靠添加 SchedulerFactoryBean 这个 FactoryBean ,所以在maven 依赖中添加 spring-context-support 。
首先添加 QuartzConfig 类 来声明相关Bean
@Configuration
public class QuartzConfig {
@Autowired
private SpringJobFactory springJobFactory;
@Bean
public SchedulerFactoryBean schedulerFactoryBean() {
SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
schedulerFactoryBean.setJobFactory(springJobFactory);
return schedulerFactoryBean;
}
@Bean
public Scheduler scheduler() {
return schedulerFactoryBean().getScheduler();
}
}
这里我们需要注意 我注入了一个 自定义的JobFactory ,然后 把其设置为SchedulerFactoryBean 的 JobFactory。其目的是因为我在具体的Job 中 需要Spring 注入一些Service。
所以我们要自定义一个jobfactory, 让其在具体job 类实例化时 使用Spring 的API 来进行依赖注入。
SpringJobFactory 具体实现:
@Component
public class SpringJobFactory extends AdaptableJobFactory {
@Autowired
private AutowireCapableBeanFactory capableBeanFactory;
@Override
protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
Object jobInstance = super.createJobInstance(bundle);
capableBeanFactory.autowireBean(jobInstance);
return jobInstance;
}
}
具体使用 (摘取自项目代码):
@Service
public class QuartzEventServiceImpl implements QuartzEventService {
private static final String JOB_GROUP = "event_job_group";
private static final String TRIGGER_GROUP = "event_trigger_group";
@Autowired
private Scheduler scheduler;
@Override
public void addQuartz(Event event) throws SchedulerException {
JSONObject eventData = JSONObject.parseObject(event.getEventData());
Date triggerDate = eventData.getDate("date");
JobDetail job = JobBuilder.newJob(EventJob.class).withIdentity(event.getId().toString(), JOB_GROUP).usingJobData(buildJobDateMap(event)).build();
Trigger trigger = TriggerBuilder.newTrigger().withIdentity(event.getId().toString(), TRIGGER_GROUP).startAt(triggerDate).build();
scheduler.scheduleJob(job, trigger);
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# springboot整合quartz
# spring
# boot
# 定时
# schedule
# SpringBoot中实现定时任务的4种方式详解
# SpringBoot中实现定时任务的几种方式
# SpringBoot2 task scheduler 定时任务调度器四种方式
# SpringBoot下使用定时任务的方式全揭秘(6种)
# SpringBoot实现固定和动态定时任务的三种方法
# Springboot实现定时任务的4种方式举例详解
# SpringBoot实现定时任务的三种方式小结
# SpringBoot最新定时任务的7种实现方案
# 自定义
# 的是
# 都是
# 我在
# 两种
# 三种
# 有两种
# 设置为
# 来实现
# 可以帮助
# 需要注意
# 让其
# 其目
# 大家多多
# 近看
# format
# throws
# fixedDelayJob
# InterruptedException
# sleep
相关文章:
c# await 一个已经完成的Task会发生什么
建站之星安全性能如何?防护体系能否抵御黑客入侵?
小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建
建站主机SSH密钥生成步骤及常见问题解答?
网站制作大概多少钱一个,做一个平台网站大概多少钱?
如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法
宝塔新建站点为何无法访问?如何排查?
如何用PHP快速搭建高效网站?分步指南
常州自助建站费用包含哪些项目?
如何自定义建站之星网站的导航菜单样式?
如何访问已购建站主机并解决登录问题?
建站之星展会模版如何一键下载生成?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
安徽网站建设与外贸建站服务专业定制方案
建站之星好吗?新手能否轻松上手建站?
网站图片在线制作软件,怎么在图片上做链接?
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
江苏网站制作公司有哪些,江苏书法考级官方网站?
想学网站制作怎么学,建立一个网站要花费多少?
如何通过cPanel快速搭建网站?
南宁网站建设制作定制,南宁网站建设可以定制吗?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
建站主机类型有哪些?如何正确选型
如何选购建站域名与空间?自助平台全解析
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
如何实现建站之星域名转发设置?
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
电脑免费海报制作网站推荐,招聘海报哪个网站多?
如何高效利用200m空间完成建站?
建站为何优先选择香港服务器?
如何在IIS中配置站点IP、端口及主机头?
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
小建面朝正北,A点实际方位是否存在偏差?
建站主机选购指南:核心配置优化与品牌推荐方案
如何快速使用云服务器搭建个人网站?
视频网站app制作软件,有什么好的视频聊天网站或者软件?
,交易猫的商品怎么发布到网站上去?
如何选择香港主机高效搭建外贸独立站?
如何快速完成中国万网建站详细流程?
济南网站制作的价格,历城一职专官方网站?
建站OpenVZ教程与优化策略:配置指南与性能提升
教程网站设计制作软件,怎么创建自己的一个网站?
建站之星如何配置系统实现高效建站?
C#如何序列化对象为XML XmlSerializer用法
广州商城建站系统开发成本与周期如何控制?
制作网站外包平台,自动化接单网站有哪些?
大连 网站制作,大连天途有线官网?
*请认真填写需求信息,我们会在24小时内与您取得联系。