@Async注释在哪里?

时间:2017-05-22 09:41:56

标签: java spring asynchronous api-design

我正在使用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注释?在控制器级别或服务级别(业务逻辑层)或存储库? 或者我在这里采取了错误的做法?当有需要大量处理的东西时,我是否应该只在服务和存储库层添加它?

1 个答案:

答案 0 :(得分:0)

正如M. Deinum所说,我不需要在我的课程中使用@Async注释,因为我使用Java可以完善未来,我不需要将它与spring框架混合使用。