日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringBoot2.0 基础案例(04):定时任务和异步任务的使用方式

發布時間:2025/3/17 javascript 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringBoot2.0 基础案例(04):定时任务和异步任务的使用方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、定時任務

1、基本概念

按照指定時間執行的程序。

2、使用場景

數據分析 數據清理 系統服務監控

二、同步和異步

1、基本概念

同步調用
程序按照代碼順序依次執行,每一行程序都必須等待上一行程序執行完成之后才能執行;
異步調用
順序執行時,不等待異步調用的代碼塊返回結果就執行后面的程序。

2、使用場景

短信通知 郵件發送 批量數據入緩存

三、SpringBoot2.0使用定時器

1、定時器執行規則注解

@Scheduled(fixedRate = 5000) :上一次開始執行時間點之后5秒再執行 @Scheduled(fixedDelay = 5000) :上一次執行完畢時間點之后5秒再執行 @Scheduled(initialDelay=1000, fixedRate=5000) :第一次延遲1秒后執行,之后按fixedRate的規則每5秒執行一次 @Scheduled(cron="/5") :通過cron表達式定義規則

2、定義時間打印定時器

import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.text.SimpleDateFormat; import java.util.Date; /*** 時間定時任務*/ @Component public class TimeTask {Logger LOG = LoggerFactory.getLogger(TimeTask.class.getName()) ;private static final SimpleDateFormat format =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") ;/*** 每3秒打印一次系統時間*/@Scheduled(fixedDelay = 3000)public void systemDate (){LOG.info("當前時間::::"+format.format(new Date()));} }

3、啟動類開啟定時器注解

@EnableScheduling // 啟用定時任務 @SpringBootApplication public class TaskApplication {public static void main(String[] args) {SpringApplication.run(TaskApplication.class,args) ;} }

四、SpringBoot2.0使用異步任務

1、編寫異步任務類

import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; @Component public class AsyncTask {private static final Logger LOGGER = LoggerFactory.getLogger(AsyncTask.class) ;/** [ asyncTask1-2] com.boot.task.config.AsyncTask : ======異步任務結束1======* [ asyncTask1-1] com.boot.task.config.AsyncTask : ======異步任務結束0======*/// 只配置了一個 asyncExecutor1 不指定也會默認使用@Asyncpublic void asyncTask0 () {try{Thread.sleep(5000);}catch (Exception e){e.printStackTrace();}LOGGER.info("======異步任務結束0======");}@Async("asyncExecutor1")public void asyncTask1 () {try{Thread.sleep(5000);}catch (Exception e){e.printStackTrace();}LOGGER.info("======異步任務結束1======");} }

2、指定異步任務執行的線程池

這里可以不指定,指定執行的線城池,可以更加方便的監控和管理異步任務的執行。

import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import java.util.concurrent.Executor; import java.util.concurrent.ThreadPoolExecutor; /*** 定義異步任務執行的線程池*/ @Configuration public class TaskPoolConfig {@Bean("asyncExecutor1")public Executor taskExecutor1 () {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();// 核心線程數10:線程池創建時候初始化的線程數executor.setCorePoolSize(10);// 最大線程數20:線程池最大的線程數,只有在緩沖隊列滿了之后才會申請超過核心線程數的線程executor.setMaxPoolSize(20);// 緩沖隊列200:用來緩沖執行任務的隊列executor.setQueueCapacity(200);// 允許線程的空閑時間60秒:當超過了核心線程出之外的線程在空閑時間到達之后會被銷毀executor.setKeepAliveSeconds(60);// 線程池名的前綴:設置好了之后可以方便定位處理任務所在的線程池executor.setThreadNamePrefix("asyncTask1-");/*線程池對拒絕任務的處理策略:這里采用了CallerRunsPolicy策略,當線程池沒有處理能力的時候,該策略會直接在 execute 方法的調用線程中運行被拒絕的任務;如果執行程序已關閉,則會丟棄該任務*/executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());// 設置線程池關閉的時候等待所有任務都完成再繼續銷毀其他的Beanexecutor.setWaitForTasksToCompleteOnShutdown(true);// 設置線程池中任務的等待時間,如果超過這個時候還沒有銷毀就強制銷毀,以確保應用最后能夠被關閉,而不是阻塞住。executor.setAwaitTerminationSeconds(600);return executor;} }

3、啟動類添加異步注解

@EnableAsync // 啟用異步任務 @SpringBootApplication public class TaskApplication {public static void main(String[] args) {SpringApplication.run(TaskApplication.class,args) ;} }

4、異步調用的測試接口

@RestController public class TaskController {@Resourceprivate AsyncTask asyncTask ;@RequestMapping("/asyncTask")public String asyncTask (){asyncTask.asyncTask0();asyncTask.asyncTask1();return "success" ;} }

五、源代碼地址

GitHub:知了一笑 https://github.com/cicadasmile/spring-boot-base


總結

以上是生活随笔為你收集整理的SpringBoot2.0 基础案例(04):定时任务和异步任务的使用方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。