@Async 注解去哪儿了?
Where does @Async annotation go?
我正在使用 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
注释?在控制器级别或服务级别(业务逻辑层)或存储库?
或者我在这里采取了错误的方法?是不是只有在服务和仓库层有需要大量处理的东西才加?
正如 M. Deinum 所说,我不需要在我的 类 中使用 @Async
注释,因为我正在使用 Java 可完成的未来,我不需要将它与 spring 框架混合。
我正在使用 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
注释?在控制器级别或服务级别(业务逻辑层)或存储库?
或者我在这里采取了错误的方法?是不是只有在服务和仓库层有需要大量处理的东西才加?
正如 M. Deinum 所说,我不需要在我的 类 中使用 @Async
注释,因为我正在使用 Java 可完成的未来,我不需要将它与 spring 框架混合。