每 5 分钟调用一次方法

Call method once every 5 minutes

我想每 5 分钟发送一封邮件,而不管我在 5 分钟内调用 sendmail() 多少次? 例如

如何实现?

public class SendMyEmail {
 private boolean sendMail=false;
 public void sendmail(String msg) {
 if(sendMail) {
 System.out.println(" Mail sent " +msg);
 }

在您的 SendMyEmail class 中有一个变量,用于存储您调用函数的时间。然后只需将您的逻辑添加到一个 if 条件中,该条件检查自该方法被调用以来是否已经过了 5 分钟。

您可以在 class 实例化(在构造函数中)时简单地创建一个时间戳。

您的发送方法只检查“自该时间戳后超过 5 分钟”?

如果是:那么取一个新的时间戳,然后发送邮件。

如果否:什么也不做。

这就是您所需要的。这里不提供代码,因为这可能是作业,重点是学习如何编写相应的代码。

您必须创建我们所说的 Schedule - 一个持续且定期运行的程序。您的时间表将具有以下逻辑:

@Scheduled(cron = "0 * * * * *") // Will run every minute
public synchronized void sendEmailSchedule() {

    Email email = getEmail();

    Date lastTimeSent = email.getLastTimeEmailWasSent();
    Date now = new Date();
    
    long difference = now.getTime() - lastTimeSent.getTime();
    long differenceInMinutes = difference / (60 * 1000) % 60; 
    
    if (differenceInMinutes > 5) {
        sendEmail(email);
    }
}

你所拥有的几乎就是你所需要的。 cron 表达式的意思是,每 5 分钟触发一次:在第 0、5、10 分钟等

public class SendMyEmail
{
    private volatile String mailMessage;

    public void sendmail(String msg)
    {
        mailMessage = msg;
    }

    @Scheduled(cron = "*/5 * * * *")
    public void sendmailJob()
    {
        if (mailMessage != null)
        {
            System.out.println(" Mail sent " + mailMessage);
            mailMessage = null;
        }
    }
}