您好,登錄后才能下訂單哦!
這篇文章主要介紹“springboot定時任務和異步任務怎么實現”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“springboot定時任務和異步任務怎么實現”文章能幫助大家解決問題。
在我們開發項目時,常常會用到異步處理任務,比如我們在網站上發送郵件,后臺會去發送郵件,此時會造成前臺響應不動,直到郵件發送完畢,響應才會成功,所以我們一般會采用多線程的方式去處理這些任務。
新建一個service
包
創建AsyncService
類
@Service public class AsyncService { public void hello(){ try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("業務進行中~~"); } }
創建controller
包
在controller
包下創建一個AsyncController
類
@RestController public class AsyncController { @Autowired AsyncService asyncService; @GetMapping("/hello") public String hello(){//調用方法后會延遲3秒在頁面顯示Success asyncService.hello(); return "success"; } }
此時訪問Localhost:8080/hello
的情況是:延遲3秒后,在頁面輸出Success
,在后臺會輸出業務進行中~~
新問題:如果想頁面直接輸出信息“Success”
,而讓這個hello
方法直接在后臺用多線程操作,就需要加上@Async注解,這樣spring boot
就會自己開一個線程池進行調用
改進:給AsyncService
加上注解
@Async//告訴Spring這是一個異步方法 public void hello(){ try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("業務進行中~~"); }
但是要讓這個注解起作用,還需要在入口文件中開啟異步注解功能
@EnableAsync //開啟異步注解功能 @SpringBootApplication public class SpringbootTaskApplication { public static void main(String[] args) { SpringApplication.run(SpringbootTaskApplication.class, args); } }
此時再次測試,發現頁面直接輸出了Success
,但是后臺仍然是3秒后輸出業務進行中
工作中常常要設置一些定時任務,比如每天在某個時間分析一遍日志
所以Spring提供了異步執行任務調度的方式,提供了兩個接口。
TaskExecutor
接口
TaskScheduler
接口
兩個注解:
? @EnableScheduling
? @Scheduled
創建一個ScheduleService
,里面編寫一個hello
方法,讓它定時執行
@Service publicclassScheduledService{ //秒分時日月周幾 @Scheduled(cron="0 * * * * ?") //這里需要學習一些cron表達式的語法,明白時間如何設置,這里的意思是每當時間到0秒時就執行一次 publicvoidhello(){ System.out.println("hello/////"); } }
要使用定時功能,還需要在入口文件中加上@EnableScheduling,表明開啟定時任務功能
@SpringBootApplication @EnableScheduling//開啟定時任務注解功能 @EnableAsync//開啟異步注解功能 publicclassSpringbootTaskApplication{ publicstaticvoidmain(String[]args){ SpringApplication.run(SpringbootTaskApplication.class,args); } }
此時測試運行,發現每當時間為0秒時就會在后臺打印出 hello////
關于“springboot定時任務和異步任務怎么實現”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。