springboot的非同步任務 定時任務的簡單案例

2021-10-08 13:23:13 字數 1788 閱讀 7356

在我們開發專案時,常常會用到非同步處理任務,比如我們在**上傳送郵件,後台會去傳送郵件,此時會造成前台響應不動,直到郵件傳送完畢,響應才會成功,所以我們一般會採用多執行緒的方式去處理這些任務。

1. 新建乙個service包

2. 建立asyncservice類

@service

public

class

asyncservice

catch

(interruptedexception e)

system.out.

println

("業務進行中~~");

}}

建立controller包

在controller包下建立乙個asynccontroller類

@restcontroller

public

class

asynccontroller

}

此時訪問localhost:8080/hello的情況是:延遲3秒後,在頁面輸出success,在後台會輸出業務進行中~~新問題:如果想頁面直接輸出資訊「success」,而讓這個hello方法直接在後台用多執行緒操作,就需要加上@async註解,這樣spring boot就會自己開乙個執行緒池進行呼叫

給asyncservice加上註解

@async

//告訴spring這是乙個非同步方法

public

void

hello()

catch

(interruptedexception e)

system.out.

println

("業務進行中~~");

}

但是要讓這個註解起作用,還需要在入口檔案開啟非同步註解功能

@enableasync

//開啟非同步註解功能

public

class

}

此時再次測試,發現頁面直接輸出了success,但是後台仍然是3秒後輸出業務進行中工作中常常要設定一些定時任務,比如每天在某個時間分析一遍日誌

所以spring提供了非同步執行任務排程的方式,提供了兩個介面。

taskexecutor介面

taskscheduler介面

兩個註解:

• @enablescheduling

• @scheduled

建立乙個scheduleservice,裡面編寫乙個hello方法,讓它定時執行

@service

publicclassscheduledservice

}

2.要使用定時功能,還需要在入口檔案中加上@enablescheduling,表明開啟定時任務功能

@enablescheduling

//開啟定時任務註解功能

@enableasync

//開啟非同步註解功能

publicstaticvoidmain

(string[

]args)

}此時測試執行,發現每當時間為0秒時就會在後台列印出hello

Spring Boot 非同步任務

可以使用非同步的方式載入方法 只需在專案入口上定義 enableasync 開啟非同步註解功能 以及某個需要非同步方法上面定義 async註解 即可1.專案入口上定義 enableasync 開啟非同步註解功能 enableasync 開啟非同步註解功能 public class 2.使用 asyn...

springboot非同步任務

enablerabbit 開啟rabbit enableasync 開啟非同步 public class 新建乙個service,此service休眠3秒 package com.example.vuelog.service.task import org.springframework.sched...

springboot非同步任務

springboot非同步任務 使用 async 告訴spring這是乙個非同步方法 service public class asynservice catch interruptedexception e system.out.println 資料處理中 主函式使用 enableasync開啟非...