2016-07-01 78 views
0

我是春天的新人。請幫我明白我必須使用(TaskExecutor接口,@ Sceduled,石英Sceduler,...)來實現這個問題:春季的任務執行和調度

我有一個訂單對象和聯繫人與1連接:N關係。一個訂單可以有很多聯繫人)。所以

  1. 當創建訂單時,應用程序必須發送電子郵件到所有連接的聯繫人。
  2. 當新聯繫人最近創建並連接到已創建的訂單時,此聯繫人還必須收到電子郵件。
  3. 當訂單過期時,2天后聯繫人必須收到電子郵件。

回答

1

第一步:

  1. 當創建訂單,應用程序可以將電子郵件發送到所有連接的聯繫人。

將2個新列添加到聯繫人表(或類似表)中。

is_Send_Email - >布爾類型

Email_Send_Time - >時間戳/日期類型

雖然插入新行(在創建新的命令),設置is_Send_Email = 和Email_Send_Time = 當前時間。 for 全部相關聯繫人。

2.當新聯繫人最近創建並連接到已創建的訂單時,此聯繫人還必須收到電子郵件。

當將聯繫人添加到訂單,設置is_Send_Email =真和Email_Send_Time =當前時間(同時插入)爲新添加的聯繫人

3.當訂單過期時,2天后聯繫人必須收到電子郵件。

設置is_Send_Email =真爲所有在到期爲了接觸和Email_Send_Time =當前時間+ 2天。

第二步:

在配置類使用@EnableScheduling啓用調度。

@Configuration 
@EnableScheduling 
public class AppConfig { 

    @Bean 
    public MyBean bean() { 
     return new MyBean(); 
    } 

} 

第三步:

使用@Scheduled註解以指定的時間間隔調用你的郵件發送方式。

作爲每彈簧documentation ..

34.4.2的@Scheduled註釋

的@Scheduled註釋可以被添加到方法與扳機 元數據。例如,以固定延遲每隔5秒鐘調用以下方法,這意味着從每次前面調用的完成時間開始測量時間段爲 。

@Scheduled(fixedDelay=5000) public void doSomething() { 
// something that should execute periodically 
} 

如果以固定速率執行是期望的,簡單地改變註釋中指定的屬性名 。在每個 調用的連續開始時間之間測量,每隔 執行以下操作。

@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 
} 

[提示]可以另外使用屬性來指定時間 區,其中 cron表達式將得到解決。 請注意,計劃爲 的方法必須具有無效返回,並且不能指望任何參數。如果 該方法需要與應用程序上下文中的其他對象進行交互,那麼通常會通過依賴注入來提供這些方法。

第四步:

檢查,以表中的每個記錄,如果is_Send_Email = TRUE一個記錄,然後觸發電子郵件爲訂單/聯繫方式什麼的。

如何使用Spring發送電子郵件,您可以參考這個article

快樂學習:-)

+0

要使用SpringBoot一個還可以依靠[這個庫(https://github.com/ozimov/spring-boot-email-tools) – JeanValjean

+0

@Mary發送電子郵件,請接受這個答案,如果有幫助的話。 –