当前位置: 首页 > 知识库问答 >
问题:

如何根据特定标准使用任务计划程序

常培
2023-03-14

我正在写一个关于春靴的项目。

现在我有一个我发送信件的用户的电子邮件地址列表。大约 1000 个地址。

由于SMTP对每小时可以发送的电子邮件数量有限制,因此我只想每小时发送99封电子邮件。然后是下一个小时的下一个99,依此类推。直到信件被发送到列表中的所有地址。

我如何使用任务计划程序来实现这一点?它应该在控制器的POST方法被调用后运行。如果你分享代码,我会很高兴。

现在我正在用一个环和线来做。睡觉

    int counter = 0;
    long startTime = System.currentTimeMillis();
    for (String emailAddress : usersEmailAddresses) {
        counter++;
        bulkEmailService.send(BulkEmailMessage.builder()
                .from(bulkEmailMessage.getFrom())
                .subject(bulkEmailMessage.getSubject())
                .content(bulkEmailMessage.getContent())
                .toAddresses(emailAddress)
                .build());

        if (counter % 99 == 0) {
            long endTime =  System.currentTimeMillis() - startTime;
            Thread.sleep(1000 * 60 * 60 - endTime);
            startTime = System.currentTimeMillis();
        }
    }

谢谢。

共有1个答案

艾弘义
2023-03-14

实现此目的的最简单解决方案是使用 cron 作业。

首先要做的是在应用程序文件或配置中添加< code>@EnableScheduling。然后,您可以在您的方法上方添加< code > @ Scheduled(cron = " 0 0 * * * * ")以每小时运行一次。(cron代码的意思是每当服务器到达分0秒0时运行代码。)

对于这个解决方案,您将需要一个新的列来了解哪些电子邮件已经发送,哪些没有发送。这个新列是可选的;您可以使用另一种方法来实现这一点。对于下面的代码,我使用名为< code>sent的列,数据类型为bit(1)或boolean。

@Scheduled(cron = "0 0 * * * *")
public void sendEmail(){
    int counter = 0;
    List<String> emailList = repository.findAllBySentIsFalse();
    for (String email: emailList){
        counter++;
        bulkEmailService.send(BulkEmailMessage.builder()
                .from(bulkEmailMessage.getFrom())
                .subject(bulkEmailMessage.getSubject())
                .content(bulkEmailMessage.getContent())
                .toAddresses(emailAddress)
                .build());

        setSentEmailToTrue();

        if (counter % 99 == 0) {
            break;
        }
    }
}
 类似资料:
  • 本文向大家介绍如何使用PowerShell启动任务计划程序的特定任务?,包括了如何使用PowerShell启动任务计划程序的特定任务?的使用技巧和注意事项,需要的朋友参考一下 要使用PowerShell启动任务计划程序的特定任务,我们需要使用Start-ScheduledTask 命令。 当我们运行上面的命令时,我们需要提供任务名称。 例如, 当您检查以上任务状态时, 示例 输出: 要在远程计算机

  • 我有一个批处理(*. bat)文件,触发一个Python脚本,这个脚本需要大约25分钟来完成交互式(通过命令提示符手动)。这个批处理文件需要每天早上运行。 当我尝试在Windows任务调度器上将其设置为计划任务并在那里运行时,所用的时间几乎是交互时的两倍。即使我在xml中将优先级设置从默认的7设置为4(更高的优先级),也没有任何区别。更改优先级设置仅适用于I/O优先级,但不适用于内存优先级,内存优

  • 问题内容: 我在Java文档中看到了这一点:ScheduledAtFixedRate,它说 如果该任务的任何执行遇到异常,将禁止后续执行 我不希望在我的应用程序中发生这种情况。即使看到异常,我也总是希望后续执行继续进行。我怎样才能从。 问题答案: 用try / catch包围Callable.call方法或Runnable.run方法… 例如: 请注意,捕获除编译器也告诉您的内容之外的其他内容(在

  • 在此之前我问了一个问题。我的服务conifg是: 我编写了一个扩展mediator交易文件。该类返回文件名并向服务发送请求。服务没有输入消息。我要每天13:30的服务。我尝试添加新的计划任务。但是它不能工作?谁能告诉我如何设置这个计划任务? 我也不知道如何设置“固定服务器”。

  • 我已经使用java创建了特定于时区的计划任务事件。我的密码是贝娄。 但是问题是当调用这个方法时,它会很快运行这个任务。我需要每天12点在亚洲/科伦坡时区运行这项工作。那要怎么做?

  • 我已经创建了一个控制台应用程序,并尝试在任务计划程序中运行。当我通过单击可执行文件或使用快捷方式运行它时,它工作正常,但当我在任务调度程序中运行它时,我得到“PHLIP231 Prod的应用程序访问路径' C:\WINDOWS\DMBErrors '被拒绝。” 我已经在我的应用程序中搜索了此路径,甚至尝试手动将路径添加到我的计算机,但没有成功。我的应用程序构建了一个excel文件并将其写入相对于可