使用gcp cloud sql代理时如何启用rewriteBatchStatements?

问题描述

我们在 GKE 上部署了一个微服务,它通过云 sql 代理连接到 GCP 上的 MysqL 数据库实例。我们使用 spring jdbctemplate.batchUpdate 来执行批量插入/更新语句。 当我将 rewriteBatchStatements=true 作为 jdbc:MysqL://localhost:3306/db?rewriteBatchStatements=true 附加到 jdbc url 时,它无法连接到数据库实例。

最后一个成功发送到服务器的数据包是 0 毫秒前。驱动程序没有收到来自服务器的任何数据包。 在 java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) 在 com.MysqL.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61) 在 com.MysqL.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) 在 com.MysqL.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151) 在 com.MysqL.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167) 在 com.MysqL.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:91) 在 com.MysqL.cj.NativeSession.connect(NativeSession.java:144) 在 com.MysqL.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:956) 在 com.MysqL.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:826) ...省略了 40 个常用帧 引起:java.net.ConnectException:连接被拒绝(连接被拒绝) 在 java.base/java.net.PlainSocketImpl.socketConnect(Native Method) 在 java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399) 在 java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242) 在 java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224)

如何启用 rewriteBatchStatements?

解决方法

此异常是由于 GKE 中缺少云代理的服务条目。 jdbc:mysql://localhost:3306/db?rewriteBatchStatements=true 工作正常