工作種,總會有一些場景是要使用定時任務的,比如每天定時更新什么數據,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,使用定時器的功能分享完了。??
不要以為每天把功能完成了就行了,這種思想是要不得的,互勉~!
若文章對您有用,請點贊支持哦。