Spring?Task實(shí)現(xiàn)定時(shí)任務(wù)的示例
1、Spring 定時(shí)任務(wù)
定時(shí)任務(wù)(Scheduled Task)指的是按照指定的時(shí)間或時(shí)間間隔,自動(dòng)執(zhí)行的任務(wù)。
在應(yīng)用程序中通常用于自動(dòng)化處理一些定期或周期性的操作,特別是與時(shí)間相關(guān)的任務(wù)。
應(yīng)用場(chǎng)景:
- 數(shù)據(jù)統(tǒng)計(jì)與報(bào)表生成
- 緩存清理與刷新:自動(dòng)清理過(guò)期數(shù)據(jù)
- 數(shù)據(jù)同步與備份
- 系統(tǒng)監(jiān)控與告警
- 消息發(fā)送與通知:自動(dòng)發(fā)送郵件
1.1 執(zhí)行方式
固定間隔執(zhí)行
- 使用
fixedRate或fixedDelay fixedRate: 每隔固定時(shí)間執(zhí)行一次(開(kāi)始時(shí)間到開(kāi)始時(shí)間)fixedDelay: 上一次任務(wù)完成后延遲固定時(shí)間再執(zhí)行
- 使用
Cron 表達(dá)式執(zhí)行
- 使用
cron表達(dá)式,可以精確控制執(zhí)行時(shí)間(每天、每周、每月等) - 表達(dá)式格式:
秒 分 時(shí) 日 月 星期
- 使用
觸發(fā)器任務(wù)
- Spring 還支持基于觸發(fā)器(Trigger)的復(fù)雜任務(wù)調(diào)度,可以動(dòng)態(tài)控制下次執(zhí)行時(shí)間
2、定時(shí)任務(wù) Spring Task 實(shí)現(xiàn)
2.1 開(kāi)啟定時(shí)任務(wù)
引入 Spring 的定時(shí)任務(wù)依賴:Spring Boot 中啟用定時(shí)任務(wù)添加 @EnableScheduling 注解
@SpringBootApplication
@MapperScan("com.hospital.mapper")
@EnableCaching
@EnableScheduling // 開(kāi)啟定時(shí)任務(wù)
public class SpringBootSystemApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootSystemApplication.class, args);
}
}2.2 創(chuàng)建定時(shí)任務(wù)類
使用 @Scheduled 注解來(lái)定義執(zhí)行周期和任務(wù),創(chuàng)建AppointmentTask,實(shí)現(xiàn)自動(dòng)取消過(guò)期預(yù)約
package com.example.task;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.example.entity.Appointment;
import com.example.mapper.AppointmentMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Date;
@Slf4j
@Component
public class AppointmentTask {
@Autowired
private AppointmentMapper appointmentMapper;
/**
* 每天凌晨1點(diǎn)執(zhí)行,將已過(guò)期未就診的預(yù)約狀態(tài)改為"已過(guò)期"
* cron表達(dá)式:秒 分 時(shí) 日 月 星期
*/
@Scheduled(cron = "0 0 1 * * ?")
public void cancelExpiredAppointments() {
log.info("開(kāi)始執(zhí)行過(guò)期預(yù)約取消任務(wù)");
// 獲取當(dāng)前日期之前的所有預(yù)約(預(yù)約日期小于今天)
Date today = Date.from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant());
LambdaUpdateWrapper<Appointment> wrapper = new LambdaUpdateWrapper<>();
wrapper.lt(Appointment::getAppointmentDate, today)
.eq(Appointment::getStatus, "已預(yù)約")
.set(Appointment::getStatus, "已過(guò)期");
int rows = appointmentMapper.update(null, wrapper);
log.info("過(guò)期預(yù)約取消任務(wù)完成,共更新{}條記錄", rows);
}
/**
* 測(cè)試用:每30秒執(zhí)行一次(取消后注釋)
*/
// @Scheduled(fixedDelay = 30000)
// public void testTask() {
// log.info("定時(shí)任務(wù)測(cè)試");
// }
}到此這篇關(guān)于Spring Task實(shí)現(xiàn)定時(shí)任務(wù)的示例的文章就介紹到這了,更多相關(guān)Spring Task 定時(shí)任務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Spring Task定時(shí)任務(wù)開(kāi)發(fā)實(shí)戰(zhàn)教程
- SpringTask-Timer實(shí)現(xiàn)定時(shí)任務(wù)的詳細(xì)代碼
- SpringBoot?使用定時(shí)任務(wù)(SpringTask)的詳細(xì)步驟
- SpringTask實(shí)現(xiàn)定時(shí)任務(wù)方法講解
- Spring-Task定時(shí)任務(wù)的使用介紹
- Spring Task定時(shí)任務(wù)的實(shí)現(xiàn)詳解
- 使用spring-task定時(shí)任務(wù)動(dòng)態(tài)配置修改執(zhí)行時(shí)間
- Spring Task定時(shí)任務(wù)每天零點(diǎn)執(zhí)行一次的操作
- mall整合SpringTask實(shí)現(xiàn)定時(shí)任務(wù)的方法示例
相關(guān)文章
Java中關(guān)于泛型、包裝類及ArrayList的詳細(xì)教程
泛型可以在類或方法中預(yù)支地使用未知的類型。這篇文章主要介紹了Java中關(guān)于泛型、包裝類及ArrayList的詳細(xì)教程,需要的朋友可以參考下2021-12-12
java byte與base64的互轉(zhuǎn)的實(shí)現(xiàn)示例
在項(xiàng)目開(kāi)發(fā)中經(jīng)常用到,比如前端上送文件流(byte[])到后臺(tái)并轉(zhuǎn)成文件,本文主要介紹了java byte與base64的互轉(zhuǎn)的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02
Spring Boot通過(guò)Redis實(shí)現(xiàn)防止重復(fù)提交
表單提交是一個(gè)非常常見(jiàn)的功能,如果不加控制,容易因?yàn)橛脩舻恼`操作或網(wǎng)絡(luò)延遲導(dǎo)致同一請(qǐng)求被發(fā)送多次,本文主要介紹了Spring Boot通過(guò)Redis實(shí)現(xiàn)防止重復(fù)提交,具有一定的參考價(jià)值,感興趣的可以了解一下2024-06-06
在SpringBoot中無(wú)縫整合Dubbo的實(shí)現(xiàn)過(guò)程
微服務(wù)架構(gòu)已經(jīng)成為現(xiàn)代應(yīng)用開(kāi)發(fā)的熱門趨勢(shì),而Dubbo作為一款強(qiáng)大的分布式服務(wù)框架,與Spring?Boot的結(jié)合是構(gòu)建高性能微服務(wù)應(yīng)用的理想選擇,本文將詳細(xì)介紹如何在SpringBoot中無(wú)縫整合Dubbo,需要的朋友可以參考下2024-01-01
Springboot2.6.x的啟動(dòng)流程與自動(dòng)配置詳解
這篇文章主要給大家介紹了關(guān)于Springboot2.6.x的啟動(dòng)流程與自動(dòng)配置的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-01-01
maven實(shí)現(xiàn)jar包導(dǎo)入+導(dǎo)出方式
這篇文章主要介紹了maven實(shí)現(xiàn)jar包導(dǎo)入+導(dǎo)出方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
Java面試題沖刺第十九天--數(shù)據(jù)庫(kù)(4)
這篇文章主要為大家分享了最有價(jià)值的三道關(guān)于數(shù)據(jù)庫(kù)的面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下2021-08-08
Spring?Boot?@Autowired?@Resource屬性賦值時(shí)機(jī)探究
這篇文章主要為大家介紹了Spring?Boot?@Autowired?@Resource屬性賦值時(shí)機(jī),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07

