Spring Boot 从JpaRepository获取数据时未从WebTestClient接收到数据

ukdjmx9f  于 2024-01-06  发布在  Spring
关注(0)|答案(1)|浏览(177)

我有一个简单的集成测试用例,我想在其中找到某个数据。首先,我使用.保存()插入数据。虽然它成功地工作(因为我调试了它,而且this.dataRepository.findAll()也没有返回null),但当我使用WebTestClient使用相同的方法(this.dataRepository.findAll())获取特定数据时,它返回null

  1. @RequestMapping(value = "/api/constant")
  2. public class ConfigurationController {
  3. @Autowired
  4. private DataRepository dataRepository;
  5. @GetMapping
  6. public Mono<Object> getConstant() {
  7. Mono.fromSupplier(() -> this.dataRepository.findAll()).subscribeOn(Schedulers.single());
  8. }
  9. }

个字符

更新

显然,当使用WebTestClient时,
此请求在不同的线程中处理,因此使用新事务。Repository inserts don't work in SpringBootTest with WebTestClient
但是现在我想知道是否有一种方法可以让WebTestClient在同一个线程上运行?因为我不想提交一个事务然后回滚它,因为它不会在我的测试中创建幂等性(例如测试在.delete()之前失败),然后数据被意外保存。

wb1gzix0

wb1gzix01#

我不确定你是如何在同一个项目中混合使用WebFlux和JPA的,如果你在同一个Sping Boot 项目中混合使用Webmvc和WebFlux,Webflux应该默认不启用,当启动应用程序时,它会通过Mvc堆栈引导应用程序。
我们应该避免传统的阻塞式Mvc堆栈和响应式WebFlux。但是将JPA混合到WebFlux应用程序中是可能的。我有一个WebFlux示例项目,其中使用JPA和R2dbc。
https://github.com/hantsy/spring-puzzles/tree/master/jpa-r2dbc/
也可以使用WebTestClient进行测试,https://github.com/hantsy/spring-puzzles/blob/master/jpa-r2dbc/src/test/java/com/example/demo/ApplicationTests.java

相关问题