SpringBoot执行定时任务@Scheduled的方法
在做项目时,需要一个定时任务来接收数据存入数据库,后端再写一个接口来提供该该数据的最新的那一条。
数据保持最新:设计字段sign的值(0,1)来设定是否最新
定时任务插入数据:首先进行更新,将所有为1即新数据设置过期,然后插入新数据,设置sign为1。这两个操作是原子操作。通过添加事务来进行控制。
Java定时任务的几种实现方式
- 基于java.util.Timer定时器,实现类似闹钟的定时任务
- 使用Quartz、elastic-job、xxl-job等开源第三方定时任务框架,适合分布式项目应用
- 使用Spring提供的一个注解:@Schedule,开发简单,使用比较方便,也是本文介绍的一种方式
Spring提供的一个注解:@Schedule,开发简单,使用比较方便,也是本文介绍的一种方式
Spring自身提供了对定时任务的支持,本文将介绍SpringBoot中@Scheduled定时器的使用。
创建定时任务
首先,在项目启动类上添加@EnableScheduling注解,开启对定时任务的支持
@SpringBootApplication @EnableScheduling publicclassScheduledApplication{ publicstaticvoidmain(String[]args){ SpringApplication.run(ScheduledApplication.class,args); } }
其中@EnableScheduling注解的作用是发现注解@Scheduled的任务并后台执行。
其次,编写定时任务类和方法,定时任务类通过SpringIOC加载,使用@Component注解,定时方法使用@Scheduled注解。
@Component publicclassScheduledTask{ @Scheduled(fixedRate=3000) publicvoidscheduledTask(){ System.out.println("任务执行时间:"+LocalDateTime.now()); } }
fixedRate是long类型,表示任务执行的间隔毫秒数,以上代码中的定时任务每3秒执行一次。
@Scheduled详解
在上面的入门例子中,使用了@Scheduled(fixedRate=3000)注解来定义每过3秒执行的任务,对于@Scheduled的使用可以总结如下几种方式:
- @Scheduled(fixedRate=3000):上一次开始执行时间点之后3秒再执行(fixedRate属性:定时任务开始后再次执行定时任务的延时(需等待上次定时任务完成),单位毫秒)
- @Scheduled(fixedDelay=3000):上一次执行完毕时间点之后3秒再执行(fixedDelay属性:定时任务执行完成后再次执行定时任务的延时(需等待上次定时任务完成),单位毫秒)
- @Scheduled(initialDelay=1000,fixedRate=3000):第一次延迟1秒后执行,之后按fixedRate的规则每3秒执行一次(initialDelay属性:第一次执行定时任务的延迟时间,需配合fixedDelay或者fixedRate来使用)
- @Scheduled(cron="0021*?*"):通过cron表达式定义规则
其中,常用的cron表达式有:
- 0021*?*:表示在每月1日的凌晨2点执行
- 01510?*MON-FRI:表示周一到周五每天上午10:15执行
- 01510?6L2019-2020:表示2019-2020年的每个月的最后一个星期五上午10:15执行
- 0010,14,16**?:每天上午10点,下午2点,4点执行
- 00/309-17**?:朝九晚五工作时间内每半小时执行
- 0012?*WED:表示每个星期三中午12点执行
- 0012**?:每天中午12点执行
- 01510?**:每天上午10:15执行
- 01510**?:每天上午10:15执行
- 01510**?*:每天上午10:15执行
- 01510**?2019:2019年的每天上午10:15执行
总结
本文主要介绍了基于SpringBoot内置的定时任务的配置使用,主要涉及两个注解,四个属性的配置:
主程序入口@EnableScheduling开启定时任务定时方法上@Scheduled设置定时cron属性:按cron规则执行fixedRate属性:以固定速率执行fixedDelay属性:上次执行完毕后延迟再执行initialDelay属性:第一次延时执行,第一次执行完毕后延迟后再次执行
到此这篇关于SpringBoot执行定时任务@Scheduled的文章就介绍到这了,更多相关SpringBoot执行定时任务@Scheduled内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!