前言

最近在项目中使用到定时任务,之前一直都是使用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
相关文章:
焦点电影公司作品,电影焦点结局是什么?
如何解决VPS建站LNMP环境配置常见问题?
如何高效搭建专业期货交易平台网站?
完全自定义免费建站平台:主题模板在线生成一站式服务
官网建站费用明细查询_企业建站套餐价格及收费标准指南
深圳网站制作平台,深圳市做网站好的公司有哪些?
,网站推广常用方法?
Python多线程使用规范_线程安全解析【教程】
建站主机无法访问?如何排查域名与服务器问题
免费ppt制作网站,有没有值得推荐的免费PPT网站?
定制建站哪家更专业可靠?推荐榜单揭晓
大连网站制作公司哪家好一点,大连买房网站哪个好?
建站主机如何选?性能与价格怎样平衡?
攀枝花网站建设,攀枝花营业执照网上怎么年审?
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
开源网站制作软件,开源网站什么意思?
如何在宝塔面板中创建新站点?
网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?
建站之星2.7模板快速切换与批量管理功能操作指南
h5在线制作网站电脑版下载,h5网页制作软件?
如何快速生成专业多端适配建站电话?
台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
如何用5美元大硬盘VPS安全高效搭建个人网站?
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
存储型VPS适合搭建中小型网站吗?
如何在香港服务器上快速搭建免备案网站?
,南京靠谱的征婚网站?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
如何安全更换建站之星模板并保留数据?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
红河网站制作公司,红河事业单位身份证如何上传?
建站之星CMS建站配置指南:模板选择与SEO优化技巧
制作网站的模板软件,网站怎么建设?
北京制作网站的公司,北京铁路集团官方网站?
建站主机选购指南:核心配置与性价比推荐解析
高端建站如何打造兼具美学与转化的品牌官网?
建站之星在线版空间:自助建站+智能模板一键生成方案
c# 在高并发场景下,委托和接口调用的性能对比
如何打造高效商业网站?建站目的决定转化率
阿里云网站制作公司,阿里云快速搭建网站好用吗?
高防服务器:AI智能防御DDoS攻击与数据安全保障
建站主机选哪种环境更利于SEO优化?
如何选择网络建站服务器?高效建站必看指南
南京网站制作费用,南京远驱官方网站?
如何用VPS主机快速搭建个人网站?
微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
*请认真填写需求信息,我们会在24小时内与您取得联系。