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