我正在尝试使用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一起使用)
谢谢。
以下代码可保存多个员工记录。本质上,它需要(员工)通量才能与-
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;
}