
恕我直言,可以改进发送邮件本身的过程,因为当前,您为每条消息打开到邮件服务器的新连接。您可以通过使用批量发送来改进它。
Spring
MailSender接口本机支持发送一系列消息,而不是单个消息,因此您不必显式处理JavaMail
Session。您可以简单地修改实际以这种方式发送邮件的类
int batchSize = 16; // for example, adjust it to you needsMimeMessage[] messages = new MimeMessage[batchSize];int messageIndex = 0;public void sendMail(String msgFrom, String body) { // prepare MimeMessage messages[messageIndex++] = email; if (messagesIndex == batchSize) { mailSender.send(messages); messageIndex = 0; }public void sendLastMails() { if (messageIndex > 0) { MimeMessage[] lastMessages = new MimeMessage[messageIndex]; for (int i =0; i<messageIndex; i++) { lastMessages[i] = messages[i]; } mailSender.send(lastMessages);}编辑:
该
sendLastMails方法可以在几个地方调用。首先, 必须
在单例bean的destroy方法中调用它,以确保在应用程序关闭时不会忘记任何消息。如果该类发送邮件是一个singleton
bean,它足以声明destroy方法为bean 是
sendLastMail,或调用它。
然后,根据您自己的业务规则,可能会在发送 一批 邮件后调用它。典型用法:在您的示例中,您有
testMap。您应该这样重写它:
for (Map.Entry<String, List<values>> entry : testMap .entrySet()) { ... mail.sendMail( msgFrom,body); // call my sendMail function in another class } mail.sendLastMails();现在由您决定是否可以进行此改进,还是应该外包。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)