SpringBoot之 非同步 定時 郵件任務

2021-10-25 18:15:08 字數 4137 閱讀 6715

2、測試步驟

三、郵件任務

參考資訊

我們在**上傳送郵件,後台在傳送郵件時由於時間過長導致前端響應不動,直到郵件傳送完畢前端才可以響應。對於這種任務,可以採用非同步的方式進行處理。

1、建立service包

2、在包中建立乙個asyncservice類,編寫相關方法並在方法上新增@async註解,告訴springboot這是乙個非同步的方法,springboot就會自己開乙個執行緒池呼叫這個方法

@service

public

class

asyncservice

catch

(interruptedexception e)

}}

3、建立controller包

4、並建立asynccontroller類,編寫方法

@restcontroller

public

class

asynccontroller

}

5、在主程式上新增乙個註解@enableasync,開啟非同步註解功能

@enableasync

// 開啟非同步註解功能

public

class

}

6、我們訪問http://localhost:8080/hello進行測試,網頁瞬間響應並顯示「ok!」,在4秒後控制台輸出「資料處理完畢」,說明我們呼叫方法時確實是非同步呼叫的

在專案中需要經常執行一些定時任務,例如:每天凌晨時開始分析前一天的日誌資訊

cron表示式是乙個字串,是又空格隔開的6或7個域組成的,每乙個域對應乙個含義,分別是(秒、分、時、每月第幾天、月、星期、年),其中最後乙個域「年」是可選字段

注意:在spring的schduled只支援前6個域,也就是不能設定「年」

字段

允許值允許的特殊字元

秒0 - 59

, - * /

分0 - 59

, - * /

時0 - 23

, - * /

日1 - 31

, - * ? / l w c

月1 - 12

, - * /

星期0 - 7 或者 sun - sat

, - * ? / l w c

特殊字元

代表含義,列舉

-區間*任意

/步長?日/星期衝突匹配l最後

w工作日

c和calendar聯絡後計算過的值

#第幾個星期,4#2表示第2個星期三

(1)0/2 * * * * ? 表示每2秒 執行任務

(1)0 0/2 * * * ? 表示每2分鐘 執行任務

(1)0 0 2 1 * ? 表示在每月的1日的凌晨2點調整任務

(2)0 15 10 ? * mon-fri 表示周一到周五每天上午10:15執行作業

(3)0 15 10 ? 6l 2002-2006 表示2002-2023年的每個月的最後乙個星期五上午10:15執行作

(4)0 0 10,14,16 * * ? 每天上午10點,下午2點,4點

(5)0 0/30 9-17 * * ? 朝九晚五工作時間內每半小時

(6)0 0 12 ? * wed 表示每個星期三中午12點

(7)0 0 12 * * ? 每天中午12點觸發

(8)0 15 10 ? * * 每天上午10:15觸發

(9)0 15 10 * * ? 每天上午10:15觸發

(10)0 15 10 * * ? 每天上午10:15觸發

(11)0 15 10 * * ? 2005 2023年的每天上午10:15觸發

(12)0 * 14 * * ? 在每天下午2點到下午2:59期間的每1分鐘觸發

(13)0 0/5 14 * * ? 在每天下午2點到下午2:55期間的每5分鐘觸發

(14)0 0/5 14,18 * * ? 在每天下午2點到2:55期間和下午6點到6:55期間的每5分鐘觸發

(15)0 0-5 14 * * ? 在每天下午2點到下午2:05期間的每1分鐘觸發

(16)0 10,44 14 ? 3 wed 每年三月的星期三的下午2:10和2:44觸發

(17)0 15 10 ? * mon-fri 周一至周五的上午10:15觸發

(18)0 15 10 15 * ? 每月15日上午10:15觸發

(19)0 15 10 l * ? 每月最後一日的上午10:15觸發

(20)0 15 10 ? * 6l 每月的最後乙個星期五上午10:15觸發

(21)0 15 10 ? * 6l 2002-2005 2023年至2023年的每月的最後乙個星期五上午10:15觸發

(22)0 15 10 ? * 6#3 每月的第三個星期五上午10:15觸發

1、在service包中建立乙個scheduledservice,並新增乙個方法,同時在方法上使用@scheduled註解並配置cron表示式

@service

public

class

scheduledservice

}

2、在主程式上增加@enablescheduleing註解開啟基於註解的定時任務功能

@enablescheduling

// 開啟基於註解的定時任務功能

public

class

}

3、啟動專案,並檢視看控制台資訊,定時任務執行成功!

1、引入pom依賴

>

>

org.springframework.bootgroupid

>

>

spring-boot-starter-mailartifactid

>

dependency

>

2、檢視一下相關的配置檔案,這些都是我們可以配置的資訊

@configurationproperties

(prefix =

"spring.mail"

)public

class

mailproperties

[email protected]

spring.mail.password=郵箱授權碼

spring.mail.host=smtp.qq.com

# qq需要配置ssl

spring.mail.properties.mail.smtp.ssl.enable=true

獲取授權碼:獲取授權碼:在qq郵箱中的設定->賬戶->開啟pop3和smtp服務

4、在service包中建立mailsendservice類

@service

public

class

mailsendservice

/** * 複雜郵件

*/public

void

sendcomplexmail()

throws messagingexception

}

5、在單元測試中呼叫相關方法進行測試

@springboottest

class

}

6、檢視郵箱,是否成功接收郵件

八 SpringBoot之任務(非同步,定時,郵件)

在service中寫乙個方法 告訴spring這是乙個非同步方法 async public void hello catch interruptedexception e system.out.println 處理資料中.在controller層呼叫並跳轉頁面 autowired asyncserv...

SpringBoot使用非同步定時任務方法(一)

1.不用匯入其他依賴,只需要在啟動類上加入 enablescheduling註解,啟動對定時任務的支援 2.編寫非同步任務配置類,使用 enableasync啟用對非同步任務的支援,configuration表示該類為配置類 3.具體類 configuration enableasync publi...

SpringBoot非同步任務與定時任務

使用步驟 啟動類裡面使用 enableasync註解開啟非同步任務 enableasync 開啟非同步功能 public class 編寫非同步任務 在springboot中,非同步任務可以使用 async註解,可以在方法上標註該註解,說明該方法是非同步方法,也可以標註在類上,表示該類的所有方法都是...