如何使用Web流通量和JDBC保存多个记录?

问题描述 投票:0回答:1

我正在尝试使用Spring Boot构建一个简单的Web应用程序-webflux(功能端点)和jdbc。该应用接收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,但是我对可以使用的数据库有一定的限制使用,因此必须使它与JDBC一起使用)

谢谢。

spring-boot jdbc reactive-programming spring-webflux project-reactor
1个回答
0
投票

以下代码可保存多个员工记录。本质上,它需要(员工)通量才能与-


    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;
    }

© www.soinside.com 2019 - 2024. All rights reserved.