springboot-调度
调度是非常常用的功能,当前springboot也对调度提供了很好的支持,springboot可以使用自带的调度功能完成定时任务,也可以集成第三方调度构件也完成定时任务。
此篇我们基于springboot自带调度和quartz插件分别实现简单的定时任务功能。
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实现的调度任务已经正常工作。
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调度框架实现的调度任务已经正常工作。
本文分享自 PersistentCoder 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!