在使用 WebFlux 时,将 completableFuture 与 CRUD 一起使用是否有意义?
Does it make sense to use completableFuture together with CRUD when working with WebFlux?
我刚开始学习 webFlux.I我刚开始学习 webplus 并且我对 question.If 将 completableFuture 与 CRUD 操作一起使用有意义吗?
也就是说,假设我有 RestService
:
@RestController
@AllArgsConstructor
public class personController {
personServiceImpl personService;
@GetMapping("/all")
Flux<Person> getAllPerson(){
return personService.findAll();
}
@PostMapping("/save")
public Mono<Person> post(@RequestBody Person user) {
System.out.println("inside***************");
return personService.saveOrUpdate(user);
}
}
做这样一个处理请求的服务有意义吗?
personServiceImpl:
public class personServiceImpl implements personService{
personRepository repository;
@Override
public Mono<Person> saveOrUpdate(Person person) {
CompletableFuture<Person> future = CompletableFuture.supplyAsync(() -> {
repository.save(person);
return person;
});
return Mono.fromFuture(future);
}
@Override
public Mono<Person> findByEmail(String email) {
CompletableFuture<Person> future = CompletableFuture.supplyAsync(() -> {
Person person = repository.findByEmail(email);
return person;
});
return Mono.fromFuture(future);
}
}
或者只是没有 Future 的常规调用会更好?
public class personServiceImpl implements personService{
personRepository repository;
@Override
public Mono<Person> saveOrUpdate(Person person) {
return repository.save();
}
@Override
public Mono<Person> findByEmail(String email) {
return repository.findByEmail();
}
}
如果你能帮助我理解 Future 在这里是否有意义,我将很高兴。
在你的情况下它没有意义。 WebFlux 已经是非阻塞的,这意味着您的应用程序将能够在等待数据库 return 查询结果的同时处理其他请求/进程。
Future
s 更适合可能需要几秒钟甚至几分钟的非常昂贵的过程。在您的情况下,您正在执行简单的数据库查询,这些查询应该 return 在几毫秒内得到结果,因此您并没有真正从 CompletableFuture
方法中受益,它甚至可能适得其反。
坚持使用 WebFlux Mono
s 和 Flux
s 并摆脱 CompletableFuture
方法。从简单开始,不要无缘无故地尝试优化您的代码。使用您可以实现且实际有效的最简单代码,除非您确实需要,否则不要将其过度复杂化。
我刚开始学习 webFlux.I我刚开始学习 webplus 并且我对 question.If 将 completableFuture 与 CRUD 操作一起使用有意义吗?
也就是说,假设我有 RestService
:
@RestController
@AllArgsConstructor
public class personController {
personServiceImpl personService;
@GetMapping("/all")
Flux<Person> getAllPerson(){
return personService.findAll();
}
@PostMapping("/save")
public Mono<Person> post(@RequestBody Person user) {
System.out.println("inside***************");
return personService.saveOrUpdate(user);
}
}
做这样一个处理请求的服务有意义吗?
personServiceImpl:
public class personServiceImpl implements personService{
personRepository repository;
@Override
public Mono<Person> saveOrUpdate(Person person) {
CompletableFuture<Person> future = CompletableFuture.supplyAsync(() -> {
repository.save(person);
return person;
});
return Mono.fromFuture(future);
}
@Override
public Mono<Person> findByEmail(String email) {
CompletableFuture<Person> future = CompletableFuture.supplyAsync(() -> {
Person person = repository.findByEmail(email);
return person;
});
return Mono.fromFuture(future);
}
}
或者只是没有 Future 的常规调用会更好?
public class personServiceImpl implements personService{
personRepository repository;
@Override
public Mono<Person> saveOrUpdate(Person person) {
return repository.save();
}
@Override
public Mono<Person> findByEmail(String email) {
return repository.findByEmail();
}
}
如果你能帮助我理解 Future 在这里是否有意义,我将很高兴。
在你的情况下它没有意义。 WebFlux 已经是非阻塞的,这意味着您的应用程序将能够在等待数据库 return 查询结果的同时处理其他请求/进程。
Future
s 更适合可能需要几秒钟甚至几分钟的非常昂贵的过程。在您的情况下,您正在执行简单的数据库查询,这些查询应该 return 在几毫秒内得到结果,因此您并没有真正从 CompletableFuture
方法中受益,它甚至可能适得其反。
坚持使用 WebFlux Mono
s 和 Flux
s 并摆脱 CompletableFuture
方法。从简单开始,不要无缘无故地尝试优化您的代码。使用您可以实现且实际有效的最简单代码,除非您确实需要,否则不要将其过度复杂化。