图书馆:
\n问题:\n我尝试使用 R2DBC (PostgreSQL) 批量插入,代码如下:
\n@Override\npublic Flux<Long> test(List<User> users) {\n return Mono.from(connectionFactory.create())\n .flatMapMany(c -> Mono.from(c.beginTransaction())\n .thenMany(Flux.fromIterable(users)\n .map(u -> {\n return Flux.from(c.createStatement("INSERT INTO public.users(name, age, salary) VALUES ($1, $2, $3)").returnGeneratedValues("id")\n .bind(0, u.getName())\n .bind(1, u.getAge())\n .bind(2, u.getSalary()).execute());\n })\n .flatMap(result -> result)\n .map(result -> result.map((row, meta) -> {\n return row.get("id", Long.class);\n }))\n .flatMap(Flux::from)\n .delayUntil(r -> c.commitTransaction())\n .doFinally((st) -> c.close())));\n}\nRun Code Online (Sandbox Code Playgroud)\n该代码将执行语句将用户插入数据库,然后获取生成的用户 ID。如果用户列表小于或等于 255,以上代码将按预期工作。当用户列表大于 255(256~)时,会出现以下异常:
\n[5b38a8c6-2] There was an …Run Code Online (Sandbox Code Playgroud) postgresql spring-webflux spring-data-r2dbc r2dbc r2dbc-postgresql