我正在使用Spring Boot 1.5.x,详细地说,我正在使用@Async
注释。我的问题是我在存储库中有以下方法。
@Repository
class Repository {
@Async
CompletableFuture<String> findSomething() {
/* Some code that returns something */
}
}
然后,我在服务中有以下方法,它调用上面的存储库。
@Service
class Service {
private Repository repository;
// ...
@Async
CompletableFuture<String> findSomething() {
return repository.findSomething()
}
}
我的问题是:我应该在@Async
方法中放置service.findSomething()
注释也吗?或者我应该在服务方法中放置仅注释?
我的意思是,Spring应该在专用线程中安排执行标有@Async
注释的方法。这是对的吗?
提前致谢。
答案 0 :(得分:1)
使用@Async
注释方法将导致调用者立即返回,并且实际执行将在单独的线程中发生,作为提交到默认SimpleAsyncTaskExecutor
的任务的一部分(如果尚未配置)另一个)。请参阅相关的春季documentation。
话虽如此,为了你的目标,嵌套@Async
并没有额外的好处。如果您的目标是让Repository.findSomething
异步并且能够从不同的地方调用它,而不仅仅是Service.findSomething
,那么您应该仅注释此方法。
此外,在您描述的场景中,Service.findSomething
本身也是异步的,即使没有使用@Async
注释。该方法不会通过调用CompletableFuture.get()
来阻止,并且它将立即返回,尽管它不会在单独的线程中执行。