问题 mysql 正常, h2 出现 The getKey method should only be used when a single key is returned
更改前
@Override
public long insertNew(ProduceMessage message) {
KeyHolder holder = new GeneratedKeyHolder();
String json = this.gson.toJson(message.getBase());
jdbcTemplate.update(this.insertStatementFactory.newPreparedStatementCreator(new Object[] {json, new Timestamp(System.currentTimeMillis())}), holder);
message.setRouteKey(routerSelector.getRouteKey(jdbcTemplate.getDataSource()));
return Objects.requireNonNull(holder.getKey()).longValue();
}
更改后
@Override
public long insertNew(ProduceMessage message) {
long id;
KeyHolder holder = new GeneratedKeyHolder();
String json = this.gson.toJson(message.getBase());
jdbcTemplate.update(this.insertStatementFactory.newPreparedStatementCreator(new Object[] {json, new Timestamp(System.currentTimeMillis())}), holder);
message.setRouteKey(routerSelector.getRouteKey(jdbcTemplate.getDataSource()));
if (Objects.requireNonNull(holder.getKeys()).size() > 1) {
id = (Long)holder.getKeys().get("id");
} else {
id = Objects.requireNonNull(holder.getKey()).longValue();
}
return id;
}
参考资料
https://stackoverflow.com/questions/17771306/spring-how-to-use-keyholder-with-postgresql