问题描述
我们使用 r2dbc 构建了一个新的 spring-boot 微服务,底层数据库是 Postgres,以尝试响应式实现。
我们定义了一个 bean:
public R2dbcEntityTemplate r2dbcEntityTemplate(DatabaseClient databaseClient){
return new R2dbcEntityTemplate(databaseClient);
}
我们像这样使用bean
r2dbcEntityTemplate.count(query,DriverLog.class)
.map(count -> {
resultDTO.setTotalResultCount(Math.toIntExact(count));
return count;
});
r2dbcEntityTemplate.select(DriverLog.class)
.matching(query)
.all()
.map(driverLog -> resultDTO.addResultsItem(driverLogMapper.toDriverLogInfo(driverLog)));
以及相应的测试:
StepVerifier.create(result).expectNextCount(1)
.assertNext(driverLog -> {
assertEquals(driverLog.getTotalResultCount().intValue(),1);
assertEquals(driverLog.getResults().size(),1);
assertEquals(driverLog.getResults().get(0).getDriverId(),DRIVER_GID);
});
StepVerifier.create(result).expectNextCount(1)
.assertNext(driverLog -> {
assertEquals(driverLog.getTotalResultCount().intValue(),DRIVER_GID);
});
测试通过,但是当我执行 result.block()
时,结果对象有两个变量——结果计数和结果,两者都为空。我没有看到它进入 assertNext。
在调试期间,如果我在服务类中对表达式求值两次,第一次运行的结果为空,第二次运行时,它有值。
是否可以采取任何措施来提高一致性并实际断言(在 assertNext 中添加了记录器以查看它们是否记录,由于 driverLog 为空且未达到目的,因此它们不记录任何内容?
>解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)