很多时候我们需要某些任务定时进行触发,自动执行。可能需要在寂静的深夜,现在就需要定时任务的出现了。
首先我们先创建一个springboot的项目,神奇的是不需要额外引入其他的依赖,不过我们需要在程序的入口上添加一个@EnableScheduling注释,开启调度任务。
@SpringBootApplication @EnableScheduling public class TimingtasksApplication { public static void main(String[] args) { SpringApplication.run(TimingtasksApplication.class, args); } }
接下来我们需要写一个方法来实现定时调用的功能。
@Component public class TimingTasks { private static final Logger logger = LoggerFactory.getLogger(TimingTasks.class); @Scheduled(fixedRate = 5000) public void printCurrentTime(){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String time = sdf.format(new Date()); logger.info("现在的时间为:{}",time); } }
我们来看一下@Scheduled注解的参数。
cron:一个类似cron的表达式,扩展了通常的UN * X定义,包括秒,分,时,星期,月,年的触发器。 fixedDelay:在最后一次调用结束和下一次调用开始之间以固定周期(以毫秒为单位)执行带注释的方法。(要等待上次任务完成后) fixedDelayString:同上面作用一样,只是String类型 fixedRate:在调用之间以固定的周期(以毫秒为单位)执行带注释的方法。(不需要等待上次任务完成) fixedRateString:同上面作用一样,只是String类型 initialDelay:第一次执行fixedRate()或fixedDelay()任务之前延迟的毫秒数 。 initialDelayString:同上面作用一样,只是String类型 zone:指明解析cron表达式的时区。
每隔5秒执行一次:"*/5 * * * * ?" 每隔1分钟执行一次:"0 */1 * * * ?" 每天23点执行一次:"0 0 23 * * ?" 每天凌晨1点执行一次:"0 0 1 * * ?" 每月1号凌晨1点执行一次:"0 0 1 1 * ?" 每月最后一天23点执行一次:"0 0 23 L * ?" 每周星期天凌晨1点实行一次:"0 0 1 ? * L" 在26分、29分、33分执行一次:"0 26,29,33 * * * ?" 每天的0点、13点、18点、21点都执行一次:"0 0 0,13,18,21 * * ?" 表示在每月的1日的凌晨2点调度任务:"0 0 2 1 * ? *" 表示周一到周五每天上午10:15执行作业:"0 15 10 ? * MON-FRI" 表示2002-2006年的每个月的最后一个星期五上午10:15执行:"0 15 10 ? 6L 2002-2006"
启动项目看一下控制台的输出:
连接到目标 VM,地址:'127.0.0.1:63924', transport: 'socket' . ____ _ __ _ _ /// / ___'_ __ _ _(_)_ __ __ _ / / / / ( ( )/___ | '_ | '_| | '_ // _` | / / / / /// ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_/__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.1.6.RELEASE) 2019-07-25 09:41:34.783 INFO 19276 --- [ main] c.z.timingtasks.TimingtasksApplication : Starting TimingtasksApplication on DESKTOP-PRKC45A with PID 19276 (D:/WorkSpace/Study/timingtasks/target/classes started by zhouzhaodong in D:/WorkSpace/Study/timingtasks) 2019-07-25 09:41:34.786 INFO 19276 --- [ main] c.z.timingtasks.TimingtasksApplication : No active profile set, falling back to default profiles: default 2019-07-25 09:41:35.194 INFO 19276 --- [ main] o.s.s.c.ThreadPoolTaskScheduler : Initializing ExecutorService 'taskScheduler' 2019-07-25 09:41:35.205 INFO 19276 --- [ scheduling-1] c.z.timingtasks.util.TimingTasks : 现在的时间为:2019-07-25 09:41:35 2019-07-25 09:41:35.209 INFO 19276 --- [ main] c.z.timingtasks.TimingtasksApplication : Started TimingtasksApplication in 0.722 seconds (JVM running for 1.323) 2019-07-25 09:41:40.206 INFO 19276 --- [ scheduling-1] c.z.timingtasks.util.TimingTasks : 现在的时间为:2019-07-25 09:41:40 2019-07-25 09:41:45.207 INFO 19276 --- [ scheduling-1] c.z.timingtasks.util.TimingTasks : 现在的时间为:2019-07-25 09:41:45
测试成功啦!
源码下载地址: https://github.com/zhouzhaodo...