首頁  >  文章  >  Java  >  怎麼用SpringBoot實現定時器

怎麼用SpringBoot實現定時器

王林
王林轉載
2023-05-10 14:58:221123瀏覽

定時器的實作

Spring boot啟動類別程式碼,加入了@EnableScheduling註解來開啟計時器功能

@SpringBootApplication   
@EnableScheduling   // 开启定时功能
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}

調度任務程式碼,需要透過@Component註解將任務類別注入到IoC容器中

@Component
public class TestSchedulingTask {
    // 这个cron表达式代表从0秒开始,每过3秒执行一次。
    @Scheduled(cron = "0/3 * * * * ?")
    public void test(){
        // 大家可以根据公司的业务来实现,更希望是@Autowrite注入service层的接口,业务逻辑写在service层中。
        // 这里测试我就输出当前系统时间了...
        Date date  = new Date(System.currentTimeMillis());
        String rule = "yyyy-MM-dd HH:mm:ss";
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(rule);
        String format = simpleDateFormat.format(date);
        System.out.println(format);
    }
}

這裡注意每個任務方法都要加上@Scheduled註解,並且規定好cron表達式。

完全可以放心,而且網路上也有線上產生cron表達式的網站,我們來看看控制台輸出的結果吧。

怎麼用SpringBoot實現定時器

cron表達式詳解

cron表達式

##欄位範圍允許的字元秒(second)0-59,/-*分(minute)0-59,/-*時(hour)0-23,/-*日期(day of month)1-31(需要考慮月份不一致),/-*?LW月(month)1-12(對應的英文縮寫也行), /-*星期(day of week)1-7,/-*?L年(year)這玩意基本上用不到這玩意基本上用不到
允許的字符的解釋:

,:算是枚舉,多值的存在,例如second中5,20就代表5和20秒的時候觸發。

/:值1/值2,值1代表開始時間,值2代表隔多久一次,例如我案例中就是從0秒開始3秒觸發一次。

-:範圍值,多久到多久。

*:全部範圍通用。

?:只存在於日期和星期中,假如你想要每個月2號觸發,但是你星期用*就會每天都會觸發,就會產生bug,所以需要?來代替*。

L:表示最後的意思,出現在日期和星期中,例如在日期中使用L就代表當月最後一天,在星期中使用3L就代表最後一個星期三觸發。

W:表示工作日,在日期中使用,假如使用9W,如果9號是星期1-5就直接觸發,如果9號是星期六就8號觸發,如果9號是星期天就星期一觸發也就是10號觸發。

以上是怎麼用SpringBoot實現定時器的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除