前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >springboot(11)-调度

springboot(11)-调度

作者头像
叔牙
发布2020-11-19 15:15:37
6760
发布2020-11-19 15:15:37
举报
文章被收录于专栏:一个执拗的后端搬砖工

springboot-调度

调度是非常常用的功能,当前springboot也对调度提供了很好的支持,springboot可以使用自带的调度功能完成定时任务,也可以集成第三方调度构件也完成定时任务。

此篇我们基于springboot自带调度和quartz插件分别实现简单的定时任务功能。

1自带scheduler

I.引入依赖

使用springboot自带scheduler有两个最核心的注解,@EnableScheduling和@Scheduled,这两个注解都在spring-context包中,而springboot的基础依赖spring-boot-starter-web会把spring-context带进来:

所以我们只需要引入springboot应用需要的基础依赖即可:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>

II.启用调度&调度任务

在启动类上添加@EnableScheduling注解:

编写简单调度任务类:

@Component @Slf4j public class SchedulerTask { private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); @Scheduled(fixedRate = 5000) public void reportCurrentTime() { log.info("currentTime is : {}",dateFormat.format(new Date())); } }

方法上添加@Scheduled注解,就会被当成一个调度任务执行。@Scheduled(fixedRate = 5000)表示5秒执行一次。

III.测试验证

启动应用:

发现每隔5秒钟会打印一下当前时间,也就是我们基于springboot自带scheduler实现的调度任务已经正常工作。

2集成quartz调度

Quartz是一个完全由java编写的开源作业调度框架,是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。

I.引入依赖

除了springboot基础的依赖之外,还要引入spring-boot-starter-quartz:

<!-- quartz --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency>

II.新建任务Bean

创建任务工作类,并继承QuartzJobBean:

@Slf4j @DisallowConcurrentExecution public class SimpleTask extends QuartzJobBean { @Override protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException { log.info("SimpleTask.executeInternal currentTime is : {}",new Date()); } }

调度任务的执行的逻辑就是打印当前时间。

III.创建调度配置类

创建调度配置类QuartzConfig并暴露JobDetail和Trigger:

@Configuration public class QuartzConfig { @Bean public JobDetail simpleTaskDetail() { return JobBuilder.newJob(SimpleTask.class) .withIdentity("simpleTask") .storeDurably() .build(); } @Bean public Trigger simpleTaskTrigger() { CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("*/5 * * * * ?"); return TriggerBuilder.newTrigger().forJob(simpleTaskDetail()) .withIdentity("simpleTask") .withSchedule(scheduleBuilder) .build(); } }

simpleTaskTrigger方法定义simpleTask任务5秒钟执行一次。

IV.测试验证

启动应用:

发现每隔5秒钟会打印一下当前时间,我们使用springboot集成quartz调度框架实现的调度任务已经正常工作。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-10-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PersistentCoder 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1自带scheduler
  • 2集成quartz调度
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档