您好,登錄后才能下訂單哦!
SpringBoot自帶的 Schedule,可以將它看成一個輕量級的Quartz,而且使用起來比Quartz簡單許多
以下任務都是在單線程下執行的
第一步 創建SpringBoot項目
第二步 添加@EnableScheduling開啟定時任務
第三步 設置定時需要執行的任務
有兩種方法設置執行時機
第一種我們就且叫他為普通方法
1.fixedRate:會為所有任務的開始執行時間編排一個表,假如fixedRate=5000,且第一次開始時間是10:00:00
任務 開始執行時間
任務1 10:00:00
任務2 10:00:05
任務3 10:00:10
任務4 10:00:15
任務5 10:00:20當執行任務耗時小于fixedRate設置的時間時,將會按照表中的開始時間執行任務,即每隔5秒會執行一個任務:
@Component
br/>當執行任務耗時小于fixedRate設置的時間時,將會按照表中的開始時間執行任務,即每隔5秒會執行一個任務:
@Component
private static final Logger LOG = LoggerFactory.getLogger(TestScheduling.class);
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");@Scheduled(fixedRate=5000)
br/>@Scheduled(fixedRate=5000)
LOG.info("執行時間:{}",sdf.format(new Date()));
}
}
當執行任務耗時大于fixedRate設置的時間時,以下一張圖就很清楚的表示了(圖的出處)
解析一下:
fixedRate設置的也是為fixedRate=5000
第一個任務開始執行時間是0:00,耗時8秒
第二個任務本應該開始執行時間是0:05,但是第一個任務執行完時間已經是0:08,所以第二個任務在第一個任務執行完畢之后會立即執行,耗時是3s
第三個任務本應該開始執行時間是0:10,但是前兩個任務執行完畢時間已經是0:11,所以第三個任務在第二個任務執行完畢之后會立即執行,耗時是6s
第四個任務,也同第二、第三個任務一樣,在預計開始執行的時間(這里第四個任務預計開始執行時間是0:15),因為上一個任務還沒有執行完畢,所以要等待上一個人執行完畢之后才會執行。
第五個任務預計開始執行時間是0:20,而前四個任務在0:19已經執行完畢,需要等待1秒,到達我們預計的開始執行時間(0:20)才會執行第五個任務。
2.fixedDelay這個就比之前的fixedRate簡單得多。如設置fixedRate=5000.下一個任務只需要盯著上一個任務的屁股(執行完畢的時間)就行了。上一個任務執行完畢5秒之后,下一個任務就會開始執行
@Component
br/>這個就比之前的fixedRate簡單得多。如設置fixedRate=5000.下一個任務只需要盯著上一個任務的屁股(執行完畢的時間)就行了。上一個任務執行完畢5秒之后,下一個任務就會開始執行
@Component
private static final Logger LOG = LoggerFactory.getLogger(TestScheduling.class);
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");@Scheduled(fixedDelay=5000)
br/>@Scheduled(fixedDelay=5000)
LOG.info("開始執行時間:{}",sdf.format(new Date()));
try {
Thread.sleep(8000);//讓任務執行的耗時時間為8秒,有利于我們的觀察
} catch (InterruptedException e) {
e.printStackTrace();
}
LOG.info("執行完畢時間:{}",sdf.format(new Date()));}
}
3.initialDelay
用于配合fixedRate和fixedDelay使用的,作用是在容器啟動后經過多長時間才開始執行第一次任務。
4.擴展一下
我們先看下一下@Scheduled注解里面有什么
br/>}
}
3.initialDelay
用于配合fixedRate和fixedDelay使用的,作用是在容器啟動后經過多長時間才開始執行第一次任務。
4.擴展一下
我們先看下一下@Scheduled注解里面有什么
br/>@Component
private static final Logger LOG = LoggerFactory.getLogger(TestScheduling.class);
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Scheduled(initialDelay = 5000,fixedDelayString = "${com.liang.scheduled:5000}")
public void myTask(){
LOG.info("開始執行時間:{}",sdf.format(new Date()));
try {
Thread.sleep(8000);
} catch (InterruptedException e) {
e.printStackTrace();
}
LOG.info("執行完畢時間:{}",sdf.format(new Date()));
}
}
?:5000作用是防止application.properties沒有配置com.liang.scheduled屬性則使用默認的5000(如果沒有寫:5000且application.properties沒有配置com.liang.scheduled屬性會報異常)
執行結果:和我們預計的一樣,下一次開始執行時間與上一次結束時間間隔正好是10秒。如果去掉application.properties中的com.liang.scheduled屬性,XM返傭代理www.kaifx.cn/broker/xm.html,則間隔時間是默認的5秒,這個自行驗證。
幾乎大部分的應用都會有定時執行任務的需求。使用Spring Boot的Scheduling Tasks能夠提高您的開發效率。這篇文章將介紹怎么通過Spring Boot去做調度任務。構建工程
創建一個Springboot工程,在它的程序入口加上@EnableScheduling,開啟調度任務。
br/>構建工程
創建一個Springboot工程,在它的程序入口加上@EnableScheduling,開啟調度任務。
br/>@EnableScheduling
public static void main(String[] args) {
SpringApplication.run(SpringbootScheduledApplication.class, args);
}
}
創建定時任務
創建一個定時任務,每過2s在控制臺打印當前時間。
@Component
public class ScheduledTasks {
private static final Logger log = LoggerFactory.getLogger(ScheduledTasks.class);
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
@Scheduled(fixedRate = 2000)
public void reportCurrentTime() {
log.info("The time is : " + dateFormat.format(new Date()));
}
}
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。