2012-11-22 38 views
0

我有一個webapp運行在我的服務器上,它有一些餘額更新。一旦平衡更新,我需要檢查,如果平衡低於5000的情況下,平衡低於5000,我應該發送警報電子郵件。這裏要注意的一點是,我需要在一天內只發送一次一次,每次餘額低於5000時警報不應該繼續。 我相信,我應該使用單身模式發送郵件,但是我不知道如何使用這個。 程序當看到餘額低於5000時,應調用具有發送電子郵件警報功能的單例類,但是如何確保程序在餘額下降時不會再次調用該函數? 任何人都可以指導我嗎?使用Singleton模式的電子郵件

+0

請嘗試使用的東西下面的答案,如果你面對任何問題,試圖得到幫助... ... – sunleo

回答

0

你還需要考慮兩個獨立的東西:

  • 電子郵件發送服務。

多種方法來實現它。是的,它可能是Singleton,但它也可能是普通的Java服務。如果你使用Spring,那麼他們有非常簡單和有用的預定義實現。這是一個example

  • 你的支票餘額邏輯。

取決於你真正需要的。如果您需要檢查每一個資產負債更新,但發送警報不多於每天一次,那麼這將是這樣的:

private Date lastAlertDate; 

    private static final BALANCE_LIMIT = 5000; 

    private void handleBalanceUpdated(long balance) { 
     if (balance < 5000) { 
     log.info("Balance has gone below {}", BALANCE_LIMIT); 
     int daysDifference = getDifferenceInDays(lastAlertDate, new Date()); 
     if (daysDifference >= 1) { 
      log.info("Last alert was {} days ago, going to send email alert", daysDifference); 
      alertService.sendSimpleAlert("Balance has gone below " + BALANCE_LIMIT + "!"); 
      lastAlertDate = new Date(); 
     } 
    } 
    } 
+0

感謝這個建議,但它意味着每個警報後,我不得不更新與此lastAlertDate數據庫。我可以嘗試以某種方式在這裏使用辛格爾頓嗎? – Akshay

+0

這取決於您使用這種「檢查器」的組件類型。它可以簡單地「活」在系統的內存中(例如作爲一個監聽器)並存儲對最新日期的引用。在這種情況下你不需要DB。 – udalmik

0

Singleton是一種設計模式,確保只創建一個對象的一個​​實例。

不聽起來像它有什麼關係,你需要什麼,你可以在你的數據庫中添加一個標誌像alert_sent=true/false並相應地更新它。

1

singleton pattern是限制一個類的實例化到一個對象的設計模式。當需要確切的一個對象來協調整個系統的操作時,這非常有用。

但對於您的要求,我不知道可以它將幫助。也許你可以使用一些國旗的概念。國旗應該每天清除。

0

您不需要任何「特殊」設計模式。例如,你可以存儲在最後一封電子郵件,通知發送,例如日期:

Date lastEmail = ... // last email date 

,並試圖發送電子郵件時chekc條件:

If(...) // lastEmail is before current day 
{ //send emal and update lastEmail }