2012-11-22 3 views
0

J'ai une webapp en cours d'exécution sur mon serveur, ce qui fait un peu équilibre mise à jour. Une fois que le solde est mis à jour, je dois vérifier si le solde est inférieur à 5000. Dans le cas, le solde descend en dessous de 5000, je envoyer un e-mail d'alerte. Le point à noter ici est que, je dois envoyer l'alerte qu'une seule fois dans une journée, alerte ne devrait pas continuer à chaque fois que le solde est inférieur à 5000. je crois, je devrais utiliser un singleton pour envoyer le courrier, mais Je ne suis pas sûr de savoir comment l'utiliser. Le programme quand voit le équilibre passe en dessous de 5000, devrait appeler la classe singleton qui aura la fonction d'envoyer une alerte, mais comment vous assurez-vous que le programme ne sera pas appeler à nouveau cette fonction lorsque le solde descend? Quelqu'un peut-il me guider à ce sujet?Email en utilisant un singleton

+0

S'il vous plaît essayer quelque chose en utilisant ci-dessous les réponses et si vous rencontrez un problème, essayez d'obtenir de l'aide ... .... – sunleo

Répondre

0

Il y a deux choses distinctes dont vous avez besoin penser :

  • Service d'envoi de courrier électronique.

Plusieurs façons de le mettre en œuvre. Oui, il pourrait être Singleton, mais il pourrait aussi être un simple service Java. Si vous utilisez Spring, alors ils ont des implémentations prédéfinies très simples et utiles. Voici un example.

  • Votre logique de balance de vérification.

dépend de ce que vous avez vraiment besoin.Si vous avez besoin de vérifier chaque mise à jour du bilan, mais pas d'envoyer des alertes plus qu'une fois par jour, alors ce sera quelque chose comme:

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

Merci pour cette suggestion, mais cela signifie qu'après chaque alerte, je dois mettre à jour la base de données avec lastAlertDate. Pourrais-je essayer d'utiliser Singleton ici d'une certaine manière? – Akshay

+0

Cela dépend du type de composant que vous utilisez pour ce "vérificateur". Il peut simplement «vivre» dans la mémoire de votre système (par exemple, en tant qu'auditeur) et stocker la référence à la date la plus récente. Vous n'avez pas besoin de DB dans ce cas. – udalmik

0

Singleton est un modèle de conception qui fait en sorte qu'une seule instance d'un objet est créé.

Cela ne semble pas avoir quelque chose à voir avec ce dont vous avez besoin, vous pouvez ajouter un drapeau dans votre base de données comme alert_sent=true/false et le mettre à jour en conséquence.

1

singleton pattern est un modèle de conception qui limite l'instanciation d'une classe à un objet. C'est utile quand exactement un objet est nécessaire pour coordonner les actions à travers le système.

Mais pour vos besoins, je ne sais pas, cela peut aider. Peut-être que vous pouvez utiliser un concept de drapeau. Et le drapeau devrait être effacé tous les jours.

0

Vous n'avez pas besoin de modèles de conception "spéciaux" ici. Par exemple, vous pouvez stocker la date à laquelle la dernière notification par courriel a été envoyé, comme:

Date lastEmail = ... // last email date 

Et lorsque vous essayez d'envoyer un courriel chekc la condition:

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