gpt4 book ai didi

java - 将 Spring @Async 放置在方法调用堆栈中的位置

转载 作者:行者123 更新时间:2023-12-02 11:31:50 26 4
gpt4 key购买 nike

我使用的是 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 注释 also 放在 service.findSomething() 方法中吗?或者我应该将注释only放在服务方法中?

我的意思是,Spring 应该在专用线程中安排标记有 @Async 注释的方法的执行。正确吗?

提前致谢。

最佳答案

使用 @Async 注释方法将导致调用者立即返回,并且实际执行将作为提交给默认 SimpleAsyncTaskExecutor 的任务的一部分在单独的线程中进行。 (如果您还没有配置另一项)。请参阅相关 Spring documentation .

话虽如此,对于您的目标来说,嵌套 @Async 并没有额外的好处。 。如果您的目标是 Repository.findSomething异步并且能够从不同的地方调用它,而不仅仅是 Service.findSomething ,你应该只注释这个方法。

此外,Service.findSomething即使没有用 @Async 注释,本身也是异步的,在您描述的场景中。该方法不会通过调用CompletableFuture.get()而阻塞并且它会立即返回,尽管它不会在单独的线程中执行。

关于java - 将 Spring @Async 放置在方法调用堆栈中的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49240919/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com