[英]Task Execution and Scheduling in Spring
我是春天的新人。 請幫助我了解我必須使用什么(TaskExecutor,@ Sceduled,Quarts Sceduler等)來實現此問題:
我有一個Order對象和Contacts ( 以1:N關系連接 。一個Order可以有多個Contacts)。 所以
第1步:
- 創建訂單后,應用程序必須向所有連接的聯系人發送電子郵件。
在聯系人表(或類似表)中添加2個新列。
is_Send_Email->布爾類型
Email_Send_Time->時間戳/日期類型
在插入新行(創建新訂單)時,設置is_Send_Email = true和Email_Send_Time = 當前時間。 所有相關的聯系人。
2.最近創建新聯系人並連接到已創建的訂單時,該聯系人還必須獲取電子郵件。
將聯系人添加到訂單時,請設置is_Send_Email = true,並且Email_Send_Time = 新添加的聯系人的當前時間(插入時)。
3.Order到期時,兩天后聯系必須獲得電子郵件。
為該聯系列表中的所有聯系人設置is_Send_Email = true,並且Email_Send_Time =當前時間+ 2天。
第2步:
使用配置類中的@EnableScheduling啟用調度。
@Configuration
@EnableScheduling
public class AppConfig {
@Bean
public MyBean bean() {
return new MyBean();
}
}
第三步:
使用@Scheduled批注以特定的時間間隔調用您的郵件發送方法。
根據Spring 文檔 ..
34.4.2 @計划的注釋
可以將@Scheduled批注與觸發器元數據一起添加到方法中。
例如,以下方法將每隔5秒鍾以固定的延遲被調用一次,這意味着將從每個先前調用的完成時間開始計算該時間段。
@Scheduled(fixedDelay=5000) public void doSomething() {
// something that should execute periodically
}
如果需要固定匯率執行,只需更改注釋中指定的屬性名稱。 在每次調用的連續開始時間之間,每5秒執行一次以下操作。
@Scheduled(fixedRate=5000) public void doSomething() {
// something that should execute periodically
}
對於固定延遲和固定速率的任務,可以指定一個初始延遲,以指示在第一次執行該方法之前要等待的毫秒數。
@Scheduled(initialDelay=1000, fixedRate=5000) public void
doSomething() {
// something that should execute periodically
}
如果簡單的周期性調度不能充分表達,則可以提供cron表達式。 例如,以下僅在工作日執行。
@Scheduled(cron="*/5 * * * * MON-FRI") public void doSomething() {
// something that should execute on weekdays only
}
[提示]您還可以使用zone屬性指定將解析cron表達式的時區。 請注意,要調度的方法必須具有空返回值,並且不能期望任何參數。 如果該方法需要與應用程序上下文中的其他對象進行交互,則通常將通過依賴項注入來提供這些對象。
第四步:
檢查訂單表中的每條記錄,如果is_Send_Email = true以獲取記錄,然后觸發該訂單/聯系人的電子郵件。
如何使用Spring發送電子郵件,可以參考本文 。
快樂學習:-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.