【问题标题】:How to Save Multiple Records using Web flux and JDBC?如何使用 Web Flux 和 JDBC 保存多条记录?
【发布时间】:2020-04-21 21:48:22
【问题描述】:

我正在尝试使用 spring boot - webflux(功能端点)和 jdbc 构建一个简单的 Web 应用程序。该应用程序接收 XML 格式的有效负载(这是 1 名员工的一些详细信息)。下面给出的代码按预期保留了一名员工的数据。

public Mono<String> createData(final Mono<Record> inputMono) {
    final String someID = UUID.randomUUID().toString();

    final Mono<Integer> asyncUpdate = inputMono.flatMap(record -> {
        return beginUpdate(dataSource, 
  sqlStatementSharedAbove).withStatementEnricher(stmt -> {
            stmt.setString(1, record.getFirstName());
            stmt.setString(2, record.getLastName());
            stmt.setInt(3, record.getAddress());
        }).build();

    });
    return asyncUpdate.doOnSuccess(affectedRows -> LOGGER.debug("Added 
 {} rows with ID {}", affectedRows, someID))
        .map(affectedRows -> someID);
}

现在我需要为多个员工保存类似的数据(修改 XML 有效负载以包含多个员工记录)

在非 webflux 世界中,我只会遍历员工对象列表并为每个对象调用此函数。

如何在 webflux 中实现同样的效果? 本质上,我希望使用 webflux 处理 saveAll 功能,并且考虑到我必须使用 JDBC(我知道 JDBC 不支持非阻塞范式并且 Mongo 支持 saveAll API,但我对我可以使用什么 DB 有一定的限制使用,因此必须使用 JDBC)

谢谢。

【问题讨论】:

  • 您可以将R2DBC 用于响应式 RDBMS,缺少很多 ORM 功能,但对于基本的 CRUD 来说没问题。
  • 它必须是 JDBC,这是我需要使用的约束

标签: spring-boot jdbc reactive-programming spring-webflux project-reactor


【解决方案1】:

以下代码可用于保存多个员工记录。从本质上讲,它需要一个 Flux (of Employees) 来工作 -


    public Mono<Void> createData(final Flux<Record> inputFlux) {

    return inputFlux.flatMap(record -> {
            return beginUpdate(dataSource, 
      sqlStatementSharedAbove).withStatementEnricher(stmt -> {
                stmt.setString(1, record.getFirstName());
                stmt.setString(2, record.getLastName());
                stmt.setInt(3, record.getAddress());
            }).build().doOnSuccess(affectedRows -> LOGGER.info("Added rows{}", affectedRows));

        }).then;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    相关资源
    最近更新 更多