SpringBoot多線程與任務(wù)調(diào)度總結(jié)
一、前言
多線程與任務(wù)調(diào)度是java開發(fā)中必須掌握的技能,在springBoot的開發(fā)中,多線程和任務(wù)調(diào)度變得越來越簡單。實(shí)現(xiàn)方式可以通過實(shí)現(xiàn)ApplicationRunner接口,重新run的方法實(shí)現(xiàn)多線程。任務(wù)調(diào)度則可以使用@Scheduled注解
二、使用示例
@Slf4j @Service @Transactional(rollbackFor = Exception.class) public class ToolServiceThread implements ApplicationRunner { @Autowired private TmpMUserService tmpMUserService; @Override public void run(ApplicationArguments args) throws Exception { log.info("開啟線程.....,"); // 處理用戶手機(jī)號(hào) // tmpMUserService.updateOne(); } /** * 定時(shí)任務(wù) 早上0點(diǎn)10分 */ // @Scheduled(cron = "0 10 0 * * ?") @Scheduled(cron = "0 0/10 * * * ?") // 每10分鐘刷新 public void hotelTask() throws Exception { } }
三、java定時(shí)任務(wù)多種實(shí)現(xiàn)方式
使用java.util.Timer類
import java.util.Timer; import java.util.TimerTask; public class TimerExample { public static void main(String[] args) { Timer timer = new Timer(); TimerTask task = new TimerTask() { @Override public void run() { System.out.println("執(zhí)行定時(shí)任務(wù)!"); } }; // 延遲5秒后開始執(zhí)行任務(wù),然后每隔2秒執(zhí)行一次 timer.schedule(task, 5000, 2000); } }
2.使用ScheduledExecutorService
ScheduledExecutorService
是Java 5及以上版本中提供的一個(gè)更加強(qiáng)大和靈活的定時(shí)任務(wù)執(zhí)行器。
import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class ScheduledExecutorExample { public static void main(String[] args) { ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(); executor.scheduleAtFixedRate(() -> { System.out.println("執(zhí)行定時(shí)任務(wù)!"); }, 5, 2, TimeUnit.SECONDS); // 延遲5秒后開始執(zhí)行,然后每隔2秒執(zhí)行一次 } }
3.使用Spring的@Scheduled注解 (適用于Spring Boot應(yīng)用)
如果你正在使用Spring Boot,你可以使用@Scheduled
注解來輕松地實(shí)現(xiàn)定時(shí)任務(wù)。首先,確保你的Spring Boot應(yīng)用已經(jīng)啟用了定時(shí)任務(wù)支持:在主類上添加@EnableScheduling
注解。然后,你可以在方法上添加@Scheduled
注解來指定任務(wù)的執(zhí)行計(jì)劃。
import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component @EnableScheduling public class ScheduledTasks { @Scheduled(fixedRate = 5000) // 每隔5秒執(zhí)行一次 public void doSomething() { System.out.println("執(zhí)行定時(shí)任務(wù)!"); } }
四、java定時(shí)任務(wù)應(yīng)用場景
- 定時(shí)發(fā)送通知:在企業(yè)管理系統(tǒng)中,可以設(shè)置定時(shí)任務(wù),定期向員工發(fā)送通知,例如會(huì)議提醒、任務(wù)更新等。
- 定時(shí)執(zhí)行報(bào)表生成:在財(cái)務(wù)或銷售部門,可以設(shè)置定時(shí)任務(wù),定期生成報(bào)表,例如每日銷售報(bào)表、月度財(cái)務(wù)報(bào)表等。
- 定時(shí)處理訂單:在電商或物流系統(tǒng)中,可以設(shè)置定時(shí)任務(wù),自動(dòng)處理訂單狀態(tài),例如發(fā)貨、確認(rèn)收貨等。
- 定時(shí)清理緩存:對(duì)于使用緩存的系統(tǒng),定時(shí)清理過期或無效的緩存可以提高系統(tǒng)的性能和穩(wěn)定性。
- 定時(shí)備份數(shù)據(jù)庫:類似于其他語言中的例子,Java 程序也可以設(shè)置定時(shí)任務(wù),定期備份數(shù)據(jù)庫數(shù)據(jù)。
- 定時(shí)啟動(dòng)或停止服務(wù):在服務(wù)器管理中,可以設(shè)置定時(shí)任務(wù),自動(dòng)啟動(dòng)或停止服務(wù),例如在夜間關(guān)閉一些非必要的服務(wù)以節(jié)省資源。
- 定時(shí)發(fā)送郵件或短信:Java 程序可以與郵件或短信服務(wù)集成,定時(shí)發(fā)送郵件或短信通知,例如會(huì)議提醒、生日祝福等。
- 定時(shí)執(zhí)行批處理任務(wù):對(duì)于需要批量處理數(shù)據(jù)的場景,可以設(shè)置定時(shí)任務(wù),自動(dòng)執(zhí)行批處理任務(wù),例如數(shù)據(jù)導(dǎo)入、數(shù)據(jù)導(dǎo)出等。
到此這篇關(guān)于SpringBoot多線程與任務(wù)調(diào)度總結(jié)的文章就介紹到這了,更多相關(guān)SpringBoot多線程與任務(wù)調(diào)度內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Security 構(gòu)建rest服務(wù)實(shí)現(xiàn)rememberme 記住我功能
這篇文章主要介紹了Spring Security 構(gòu)建rest服務(wù)實(shí)現(xiàn)rememberme 記住我功能,需要的朋友可以參考下2018-03-03Springboot中動(dòng)態(tài)語言groovy介紹
Apache的Groovy是Java平臺(tái)上設(shè)計(jì)的面向?qū)ο缶幊陶Z言,這門動(dòng)態(tài)語言擁有類似Python、Ruby和Smalltalk中的一些特性,可以作為Java平臺(tái)的腳本語言使用,這篇文章主要介紹了springboot中如何使用groovy,需要的朋友可以參考下2022-09-09Java語言實(shí)現(xiàn)基數(shù)排序代碼分享
這篇文章主要介紹了Java語言實(shí)現(xiàn)基數(shù)排序代碼分享,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12Spring如何在一個(gè)事務(wù)中開啟另一個(gè)事務(wù)
這篇文章主要介紹了Spring如何在一個(gè)事務(wù)中開啟另一個(gè)事務(wù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01