1

我需要在 SQL 服务器中执行一个存储过程来获取一些数据,并且由于我稍后会将数据保存到 Mongo 中并且这个是 withReactiveMongoTemplate等等,所以我介绍了 Spring R2DBC。

    implementation("org.springframework.data:spring-data-r2dbc:1.0.0.RELEASE")
    implementation("io.r2dbc:r2dbc-mssql:0.8.1.RELEASE")

我看到我可以用 R2DBC 做SELECT等等INSERT,但有可能EXEC prod_name吗?我试过了,它永远挂起,然后测试终止,没有成功,但也没有失败。日志的最后一行是:

io.r2dbc.mssql.QUERY - Executing query: EXEC "SCHEMA"."MY_PROCEDURE" 

代码如下:

    public Flux<Coupon> selectWithProcedure() {
        return databaseClient
                .execute("EXEC \"SCHEMA\".\"MY_PROCEDURE\" ")
                .as(Coupon.class)
                .fetch().all()
                .doOnNext(coupon -> {
                    coupon.setCouponStatusRefFromId(coupon.getCouponStatusRefId());
                });
    }

而且似乎没有检索到任何数据。

如果我用简单的查询测试其他一些方法,就像SELECT...它一样有效。但问题是,DBA 不允许我的应用程序读取表数据,而是为我创建了一个过程。如果无法进行此查询,我必须使用传统的 JPA 方式,而在 Mongo 端进行响应式已经失去了意义。

4

1 回答 1

1

出色地。我刚看到这个:

https://github.com/r2dbc/r2dbc-mssql,版本 0.8.1:

下一步:

  • 存储过程的执行
  • 添加对 TVP 和 UDT 的支持

和:

https://r2dbc.io/2019/05/13/r2dbc-0-8-milestone-8-released

我们已经为下一个里程碑准备了一些票,我们知道它们需要进一步的 SPI 修改:

  • 支持自动提交
  • 连接验证
  • 支持存储过程
于 2020-03-24T16:57:32.727 回答