我正在研究dropwizard应用程序。我有一个资源EmployeeResource,它会触发一个邮件api。
@Path("/employee")
public class EmployeeResource {
@GET
@Path("/list")
public void getEmployeeDetails(){
//DAO call and other stuff
mailClient.sendMail();
}
}
现在,sendMail方法将从数据库中获取一些详细信息,然后调用邮件API。我希望方法sendMail不阻止“ / employee / list”请求。有没有一种方法可以使sendMail方法异步?
我查了一下,找到了使API异步的解决方案,但我只希望我的 sendMail 方法是异步的。我该如何解决?
编辑:我不使用Spring 框架,而只是使用Dropwizard 框架。
答案 0 :(得分:2)
要使方法或任何代码块异步执行,您始终可以通过实现Runnable接口来创建新的线程。对于您的要求如下:
@Path("/employee")
public class EmployeeResource {
@GET
@Path("list")
@Async
public void getEmployeeDetails(){
//DAO call and other stuff
new Thread(new Runnable() {
public void run() {
mailClient.sendMail();
}
}).start();
}
}
[edit1]如果您认为发送电子邮件的并发性很高,则可以使用内部有队列的 ExecutorService (您可以详细了解here):
private static final ExecutorService TASK_EXECUTOR = Executors.newCachedThreadPool();
您的呼叫发送邮件方法的部分代码将如下所示:
TASK_EXECUTOR.submit(new Runnable() {
@Override
public void run() {
mailClient.sendMail();
}
});