我正在写一个关于SpringBoot的项目。
现在,我有了一个用户的电子邮件地址列表,我可以向其发送一封信。大约1000个地址。
由于SMTP对每小时可以发送的电子邮件数量有限制,我只想每小时发送99封电子邮件。接下来的99个小时,以此类推,直到信件被发送到列表中的所有地址。
如何使用任务调度程序执行此操作?它应该在控制器的POST方法被调用后运行。如果你分享代码,我会很高兴。
现在,我正在使用循环和Thread.sleep
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条答案
按热度按时间4xrmg8kj1#
实现这一点最简单的解决方案是使用cron作业。
要做的第一件事是在应用程序文件或配置中添加
@EnableScheduling
。然后,您可以在方法上方添加@Scheduled(cron = "0 0 * * * *")
,以每小时运行一次。(cron代码意味着每次服务器达到分钟0和秒0时运行代码。)对于此解决方案,您将在数据库中以
last_send_id
列保存广播电子邮件。我假设电子邮件列表的ID从1到电子邮件列表的总大小。每次广播电子邮件达到1000,它都会在数据库中接收下一封电子邮件,并从头开始运行。