为什么 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 反应式存储库。
我正在 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 反应式存储库。