只是好奇地通过以下想法改进我的程序的响应时间,请帮助执行它:
@Controller
public class SendData{
@RequestMapping(value = "/getEmailId", method = RequestMethod.GET)
public String getUserMail(String userId) {
//getting Email Id From Database
String emailId = getEmailIdFromDatabase(userId);
//send mail
sendNotificationMail(emailId);
// send data to requestor
return emailId;
}
}
可能的想法:在将EmailId
返回给请求者
@Controller
public class SendData{
@RequestMapping(value = "/getEmailId", method = RequestMethod.GET)
public String getUserMail(String userId) {
//getting Email Id From Database
String emailId = getEmailIdFromDatabase(userId);
// send data to requestor
return emailId;
//send mail
sendNotificationMail(emailId);
}
}
因为我正在大规模地进行(例如,我得到emailIds
的列表)所以我希望请求者首先获得emailIds
并删除发送通知邮件的等待时间。
答案 0 :(得分:2)
您提出的第二个代码块无效。 return语句之后的代码是死代码,它根本不会被调用,我猜java甚至不会让它编译。</ p>
我看到你正在使用Spring,因此解决问题的一个方法是创建一个服务来处理电子邮件请求并使用JavaMailSender
类。可以使用properties.yml
配置此类,您可以在以下教程中找到一个很好的示例:Sending HTML Mail with Spring Boot and Thymeleaf
为了防止它被阻止,您只需要使用@Async
注释负责在Service类内发送电子邮件的方法。这很可能是您简单应用的最佳解决方案。
答案 1 :(得分:1)
一种可能且天真的解决方案就是为邮件发送启动一个新线程:
new Thread() {
@Override
public void run() {
sendNotificationMail(emailId);
}
}.start();
更强大的版本是在&#34之间拆分;我想要发送邮件&#34;和#34;我发了一封邮件&#34;。例如,不要发送邮件,只需将该邮件插入表中即可。使用@Scheduled从数据库中插入邮件,然后发送并删除它。这样您就可以缩短响应时间。它就是这样。当然,这只是一个想法,你可以使用消息总线等,但你明白了。
答案 2 :(得分:1)
问题的解决方法是使sendNotication服务异步:
new Thread()
{
@Override
public void run()
{
sendNotificationMail(emailId);
}
}.start();