0

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

4

5 回答 5

1

单例模式 是一种将类的实例化限制为一个对象的设计模式。当需要一个对象来协调整个系统的动作时,这很有用。

但是对于您的要求,我不知道它是否会有所帮助。也许您可以使用一些标志概念。并且每天都要清旗。

于 2012-11-22T07:44:14.103 回答
0

单例是一种确保只创建一个对象实例的设计模式。

听起来它与你需要的东西没有任何关系,你可以在你的数据库中添加一个标志alert_sent=true/false并相应地更新它。

于 2012-11-22T07:38:54.220 回答
0

用户定时器任务每天只发送一次邮件

单例模式

于 2012-11-22T07:40:05.157 回答
0

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

Date lastEmail = ... // last email date

并且在尝试发送电子邮件时检查条件:

If( ... ) // lastEmail is before current day
{  //send emal and update lastEmail }
于 2012-11-22T07:44:26.553 回答
0

您需要考虑两件不同的事情:

  • 电子邮件发送服务。

实现它的几种方法。是的,它可以是Singleton,但也可以是普通的 Java 服务。如果您使用Spring,那么它们具有非常简单且有用的预定义实现。这是一个例子

  • 您的检查余额逻辑。

取决于你真正需要什么。如果您需要检查每个余额更新但每天发送的警报不超过一次,那么它将类似于:

    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();
        }
    }
    }
于 2012-11-22T08:17:52.600 回答