定时任务Scheduled

本文介绍了Java中使用@Scheduled注解实现定时任务的方法,包括如何设置定时规则,如固定延迟(fixedDelay)和固定速率(fixedRate)。同时提到了启用定时任务的@EnableScheduling注解,并给出了在线Cron表达式生成器的链接,以及讨论了Java定时任务的其他实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

快速使用:浅谈@Scheduled注解_wal1314520的博客-CSDN博客_@scheduled注解

@Scheduled详解:java定时器每一分钟执行一次_2行代码搞定一个定时器_weixin_39997300的博客-CSDN博客

在线cron表达式生成器:在线Cron表达式生成器

其他定时方法:Java定时任务Schedule实现的4种方式_行知致简的博客-CSDN博客_java定时任务

用法

1、需要定时执行的方法上加上@Scheduled注解,这个注解中可以指定定时执行的规则

2、Spring容器中使用@EnableScheduling开启定时任务的执行,此时spring容器才可以识别@Scheduled标注的方法,然后自动定时执行。

cron表达式含义
"0 0 10,14,16 * * ?"每天上午10点,下午2点,4点
"0 0/30 9-17 * * ?"朝九晚五工作时间内每半小时
"0 0 12 ? * WED"表示每个星期三中午12点
"0 0 12 * * ?"每天中午12点触发
"0 15 10 ? * *"每天上午10:15触发
"0 15 10 * * ?"每天上午10:15触发
"0 15 10 * * ? *"每天上午10:15触发
"0 15 10 * * ? 2005"2005年的每天上午10:15触发
"0 * 14 * * ? "在每天下午2点到下午2:59期间的每1分钟触发
"0 0/5 14 * * ?"在每天下午2点到下午2:55期间的每5分钟触发
"0 0/5 14,18 * *?"在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
"0 0-5 14 * * ?"在每天下午2点到下午2:05期间的每1分钟触发
"0 10,44 14 ? 3 WED"每年三月的星期三的下午2:10和2:44触发
"0 15 10 ? * MON-FRI"周一至周五的上午10:15触发
"0 15 10 15 * ?"每月15日上午10:15触发
"0 15 10 L * ?"每月最后一日的上午10:15触发
"0 15 10 ? * 6L"每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6L 2002-2005"2002年至2005年的每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6#3"每月的第三个星期五上午10:15触发

以下的方法将以一个固定延迟时间5秒钟调用一次执行,这个周期是以上一个调用任务的完成时间为基准,在上一个任务完成之后,5s后再次执行:

 @Scheduled(fixedDelay = 5000)
 public void doSomething() {
    // something that should execute periodically
 }

如果需要以固定速率执行,只要将注解中指定的属性名称改成fixedRate即可,以下方法将以一个固定速率5s来调用一次执行,这个周期是以上一个任务开始时间为基准,从上一任务开始执行后5s再次调用:

 @Scheduled(fixedRate = 5000)
 public void doSomething() {
    // something that should execute periodically
 }

其他定时方法的使用

 // 第一种方法:设定指定任务task在指定时间time执行 schedule(TimerTask task, Date time)  
 public static void timer1() {  
     Timer timer = new Timer();  
     timer.schedule(new TimerTask() {  
         public void run() {  
             System.out.println("-------设定要指定任务--------");  
         }  
     }, 2000);// 设定指定的时间time,此处为2000毫秒  
 }  
 ​
 // 第二种方法:设定指定任务task在指定延迟delay后进行固定延迟peroid的执行  
 // schedule(TimerTask task, long delay, long period)  
 public static void timer2() {  
     Timer timer = new Timer();  
     timer.schedule(new TimerTask() {  
         public void run() {  
             System.out.println("-------设定要指定任务--------");  
         }  
     }, 1000, 1000);  
 }  
   
 // 第三种方法:设定指定任务task在指定延迟delay后进行固定频率peroid的执行。  
 // scheduleAtFixedRate(TimerTask task, long delay, long period)  
 public static void timer3() {  
     Timer timer = new Timer();  
     timer.scheduleAtFixedRate(new TimerTask() {  
         public void run() {  
             System.out.println("-------设定要指定任务--------");  
         }  
     }, 1000, 2000);  
 }  
 ​
 // 第四种方法:安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行.  
 // Timer.scheduleAtFixedRate(TimerTask task,Date firstTime,long period)  
 public static void timer4() {  
     Calendar calendar = Calendar.getInstance();  
     calendar.set(Calendar.HOUR_OF_DAY, 12); // 控制时  
     calendar.set(Calendar.MINUTE, 0);       // 控制分  
     calendar.set(Calendar.SECOND, 0);       // 控制秒  
 ​
     Date time = calendar.getTime();         // 得出执行任务的时间,此处为今天的12:00:00  
 ​
     Timer timer = new Timer();  
     timer.scheduleAtFixedRate(new TimerTask() {  
         public void run() {  
             System.out.println("-------设定要指定任务--------");  
         }  
     }, time, 1000 * 60 * 60 * 24);// 这里设定将延时每天固定执行  
 }  

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值