电子邮件代码使java spring MVC中的代码变慢

时间:2011-03-13 07:14:54

标签: java email spring-mvc

我已经添加了这是我的控制器

@RequestMapping(value = "/persons/add", method = RequestMethod.POST)
        public String add(@Valid @ModelAttribute("personAttribute") Person person,
                BindingResult result) {
        logger.debug("Received request to add new person");


        SimpleMailMessage mailMessage = new SimpleMailMessage();

        mailMessage.setTo("someone@abc.com");
        mailMessage.setSubject("This is the test message for testing gmail smtp server using spring mail");
        mailMessage.setFrom("abc@gmail.com");
        mailMessage.setText("This is the test message for testing gmail smtp server using spring mail. \n" +
                "Thanks \n Regards \n Saurabh ");
        mailSender.send(mailMessage);


        if (result.hasErrors())
                return "hibernate/addpage";
        else
        personService.add(person);

                return "hibernate/addedpage";
    }

按下添加按钮

后需要5-6秒

4 个答案:

答案 0 :(得分:2)

像大卫说的那样,使用异步API。我不建议创建新线程。在此处为每个请求创建一个线程可能意味着创建了许多线程来为并发请求提供服务。最好使用具有有限池大小的线程池执行程序,并将执行邮件发送的作业排入队列。 Google java执行器以及如何在spring中使用它们;有各种实现。这意味着您的请求不会被阻止,并且它们会像您根本不发送邮件一样快速执行(很多)。

或者,使用本地邮件服务器 - 通过在localhost上运行的邮件服务器发送要快得多,但我建议使用异步方法。但是,如果沿着异步路线走下去,还有一些事情需要考虑,例如如何处理邮件发送失败。在错误情况下执行流程是否不同或者您可以安全地忽略它是否至关重要?

答案 1 :(得分:1)

这是一个问题吗?

您正在同步发送邮件 - 这可能需要几秒钟。这个问题是什么?

我认为gmail也可能起作用....

答案 2 :(得分:1)

这可能是预期的。向邮件服务器提交邮件并不是即时的。

如果这是一个问题;使用异步API发送消息(或启动一个线程来执行此操作)。

答案 3 :(得分:0)

最好使用异步邮件服务。

Spring TaskExecutor for Mail