springboot 定時任務的使用

工作種,總會有一些場景是要使用定時任務的,比如每天定時更新什么數據,spring定時任務使用起來相對來說比較簡單,因為日常使用都是去別人的blog復制粘貼,也沒有仔細看過它的用法,今天和大家一起學習分享一下。一起干飯!


本章主要內容

  • 使用@Scheduled生成定時任務
  • @Scheduled的屬性及cron表達式

如果在spring中使用定時器,需要在配置文件中加入@EnableScheduling,就能夠使用注解驅動定時任務的了,然后可以通過注解@Scheduled去配置如何定時,在響應的定時器類中,使用注解@Component使之成為組件,再使用 @Scheduled()使定時器生效即可。

1.使用@Scheduled生成定時任務

package com.ptdot.portal.task;

import com.ptdot.portal.entity.Dynamic;
import com.ptdot.portal.service.DynamicService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.time.LocalTime;

/**
 * @ClassName DynamicTask
 * @Description TODO
 * @Author liulinfang
 * @Date 2020/7/7 11:13
 * @Version 1.0 
 */
@Slf4j
@Component
public class DynamicTask {

    @Resource
    DynamicService dynamicService;

    /**
     * 定時減分
     */
    @Scheduled(cron = "0/1 0 0 * * ? ")
    public void dynamicMinusPoints() {

     //----執(zhí)行想要執(zhí)行的方法,
    log.error(LocalTime.now().getSecond()+"");
    }

}

這里的注解@Scheduled 配置為每秒執(zhí)行一次。這樣,啟動SpringBoot程序,很快通過控制臺看到響應的日志。(這里的@Slf4j是使用 的lombok注解,去掉也沒有關系)當然這里使用cron的表達式來控制執(zhí)行時間,還可以通過其他的方式來定義執(zhí)行的時間。

2.@Scheduled的屬性及cron表達式

我們先看下@Scheduled可配置的屬性:

    String CRON_DISABLED = "-";
    /**
     * 使用表達式的方式定義任務執(zhí)行時間
     */
    String cron() default "";
    /**
     * 可以設置通用的時區(qū)
     */
    String zone() default "";
    /**
     * 表示從上一個任務完成開始 到下一個任務開始 的間隔,單位為毫秒
     */
    long fixedDelay() default -1L;
    /**
     * 與fixedDelay相同,只使用字符串,這樣可以使用SpEL來引入配置文件的配置
     */
    String fixedDelayString() default "";
    /**
     * 從上一個任務開始到下一個任務開始的間隔,單位為毫秒
     */
    long fixedRate() default -1L;
    /**
     * 與fixedRate相同,只是使用字符串,這樣可以使用Spel來引入配置文件的配置
     */
    String fixedRateString() default "";
    /**
     * 在SpringIoc容器完成初始化后,首次任務執(zhí)行延遲時間,單位為毫秒
     */
    long initialDelay() default -1L;
    /**
     * 與initialDay相同,只是使用字符串,這樣可以使用SpEL來引入配置文件的配置
     */
    String initialDelayString() default "";

在其配置中,我們用的最多的就是cron,但是也只有cron不是很好理解,只有cron是可以通過表達式更為靈活地配置運行方式。

cron有6~7個空格分割時間元素,按照順序一次是“秒 分 時 天 月 星期 年”,其中年是一個可以不配置的元素。

表達式中有一些特殊字符,如?和*,這里因為天和星期會產生定義上的沖突,所以往往會以通配符?表示,它表示不指定值,而*則表示任意的數值。還有其他可用的通配符

通配符 描述
* 表示任意值
? 不指定值,用于處理天和星期配置的沖突
- 指定時間區(qū)間
/ 指定時間間隔執(zhí)行
L 最后的
# 第幾個
, 列舉多個項

emmm,使用定時器的功能分享完了。??


不要以為每天把功能完成了就行了,這種思想是要不得的,互勉~!

若文章對您有用,請點贊支持哦。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容