我是春天的新人。請幫我明白我必須使用(TaskExecutor接口,@ Sceduled,石英Sceduler,...)來實現這個問題:春季的任務執行和調度
我有一個訂單對象和聯繫人與1連接(:N關係。一個訂單可以有很多聯繫人)。所以
- 當創建訂單時,應用程序必須發送電子郵件到所有連接的聯繫人。
- 當新聯繫人最近創建並連接到已創建的訂單時,此聯繫人還必須收到電子郵件。
- 當訂單過期時,2天后聯繫人必須收到電子郵件。
我是春天的新人。請幫我明白我必須使用(TaskExecutor接口,@ Sceduled,石英Sceduler,...)來實現這個問題:春季的任務執行和調度
我有一個訂單對象和聯繫人與1連接(:N關係。一個訂單可以有很多聯繫人)。所以
第一步:
- 當創建訂單,應用程序可以將電子郵件發送到所有連接的聯繫人。
將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。
快樂學習:-)
要使用SpringBoot一個還可以依靠[這個庫(https://github.com/ozimov/spring-boot-email-tools) – JeanValjean
@Mary發送電子郵件,請接受這個答案,如果有幫助的話。 –