很多时候我们需要某些任务定时进行触发,自动执行。可能需要在寂静的深夜,现在就需要定时任务的出现了。
-
首先我们先创建一个 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 表达式的时区。
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…