使用Singleton模式发送电子邮件

时间:2012-11-22 07:35:30

标签: java singleton

我的服务器上运行了一个webapp,它进行了一些 balance 更新。更新余额后,我需要检查余额是否低于5000.如果余额低于5000,我应该< strong>发送电子邮件提醒。这里需要注意的是,我需要每天只发送一次警告 ,每次余额低于5000时警报都不应该继续。 我相信,我应该使用单例模式发送邮件,但我不知道如何使用它。 当程序看到余额低于5000时,应该调用单例类,它将具有发送电子邮件警报的功能,但是如何确保程序在余额下降时不再调用此函数? 任何人都可以指导我吗?

5 个答案:

答案 0 :(得分:1)

  

singleton pattern是一种设计模式,它将类的实例化限制为一个对象。当需要一个对象来协调整个系统的操作时,这非常有用。

但是根据您的要求,我不知道它是否会有所帮助。也许你可以使用一些旗帜概念。并且每天应该清除旗帜。

答案 1 :(得分:0)

Singleton是一种设计模式,可确保只创建一个对象实例。

听起来与您需要的内容没有任何关系,您可以在数据库中添加一个标记,如alert_sent=true/false并相应地更新。

答案 2 :(得分:0)

答案 3 :(得分:0)

这里不需要任何“特殊”设计模式。例如,您可以存储上次发送电子邮件通知的日期,例如:

Date lastEmail = ... // last email date

当试图发送电子邮件时,条件是:

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

答案 4 :(得分: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();
        }
    }
    }