我正在使用Spring Web 4.0.5编写REST服务,其中一种调用方法是发送电子邮件(使用javax邮件)。发送邮件需要一些时间,但我希望能够在此方法完成之前发送HTTP响应(无论响应,例如200) - 因此在发送邮件之前。它甚至可能吗?最好没有多线程?
@RestController
@RequestMapping(value = "/mails", produces = "application/json")
public class RestMailService{
@Autowired
MailService mailService;
@RequestMapping(value="/test", method = RequestMethod.GET)
public void sendMail(){
mailService.sendMail();
}
}
答案 0 :(得分:0)
我相信所有可能的解决方案都包括多线程。该线程将由您直接启动或隐藏在消息传递或类似的东西之后。
如果您要使用多线程,请使用一些Executor
而不是以下建议new Thread(...).start()
我还要注意,在操作完成之前返回HTTP 200可能会让用户感到有些困惑,因为代码表明操作成功了,实际上操作可能还没有开始。