簡體   English   中英

春季的任務執行和計划

[英]Task Execution and Scheduling in Spring

我是春天的新人。 請幫助我了解我必須使用什么(TaskExecutor,@ Sceduled,Quarts Sceduler等)來實現此問題:

我有一個Order對象和Contacts以1:N關系連接 。一個Order可以有多個Contacts)。 所以

  1. 創建訂單后,應用程序必須向所有連接的聯系人發送電子郵件。
  2. 當新的聯系人最近被創建並連接到已經創建的訂單時,該聯系人也必須獲得電子郵件。
  3. 當訂單到期時,兩天后,聯系人必須收到電子郵件。

第1步:

  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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM