我正在使用Spring框架为移动和Web应用程序构建API。据我所知,注释@Async
意味着将生成一个新线程以满足此方法处理。因此,要保持进程异步运行,控制器代码如下所示:
@Async
@RequestMapping(path = "", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody CompletableFuture<ResponseEntity<ApiResponse>> DoSomething()
{
log.info("Get something done with the request received from user ");
return (CompletableFuture.supplyAsync(() -> DoSomethingProcessor()));
}
这里我让控制器接收请求,然后将其发送到处理器方法(也是@Async
)。在这种情况下,控制器可以自由接收更多请求,并且请求将同时运行。这是处理器方法的代码:
@Async
private ResponseEntity<ApiResponse> GetPermissionsProcessor () {
//Do things here
return new ApiResponse()
}
处理器调用服务方法,如果需要,服务方法又调用存储库。
更新 服务层如下所示:
@Async
public static ApiResponse CreateRole (Object anObject) throws Exception{
//Do things and call repository
return new ApiResponse(x);
}
这是存储库代码:
public static Integer InsertRole (Object newObject, DataSourceConfig dsc)
{
String sql = "INSERT INTO table";
dsc.insertObject(sql, NewObject);
return dsc.insertObject(sql, newRole);
}
我的问题是我在哪里停止添加@Async
注释?在控制器级别或服务级别(业务逻辑层)或存储库?
或者我在这里采取了错误的做法?当有需要大量处理的东西时,我是否应该只在服务和存储库层添加它?