为什么 Spring 引导控制器在使用异步时不给出 json 响应?

Why Spring boot controller not giving json reponse while using async?

我正在 spring 引导中制作应用程序。在我将其设为异步之前,它一直运行良好。我没有收到任何错误,也没有 json 响应。我想不通。我该如何解决这个问题。请帮我弄清楚。

Post 存储库:

@Repository
public interface PostRepository extends JpaRepository<Post,Long> {

@Async
Post findBySubject(String subject);
}

Post 服务:

@Service
@Transactional
public class PostService {

@Autowired
private PostRepository postRepository;

@Async
public CompletableFuture<Post> find(String subject) throws ExecutionException, 
InterruptedException {
    System.out.println("Current Thread Name: "+Thread.currentThread().getName());
    Post post = postRepository.findBySubject(subject);
    System.out.println("Current Thread Name: "+Thread.currentThread().getName());
    return CompletableFuture.completedFuture(post);
  }
}

Post 控制器:

@Slf4j
@RestController
@RequestMapping("/posts")
public class PostController {

@Autowired
private PostService postService;

@GetMapping
public CompletableFuture<Post> get(@RequestParam String subject){
    try {
        System.out.println("Current Thread Name: "+Thread.currentThread().getName());
        return postService.find(subject);
    } catch (Exception e) {
        throw new IllegalStateException(e);
    }
  }
}

Jpa 存储库不是异步的

@Async Post findBySubject(字符串主题); }

这引起了问题。

如果你想让它工作,那么你需要 return CompletableFuture。这里我指的是堆栈溢出的 link: (但同样不推荐这样做)

因此,从存储库中删除@Async。 JpaRepository 不会异步工作。如果您需要异步回购,请改为查看 spring 反应式存储库。