(注:このブログはもう更新していません)この日記は私的なものであり所属会社の見解とは無関係です。 GitHub: takahashikzn

[クラウド帳票エンジンDocurain]

GCP上のMySQLへ接続しようとするとNoSuchMethodErrorとかAbstractMethodErrorが発生して辛い

生きてます。マジで超忙しいです。

誰か、休暇をください…その時間で仕事をしたいので!

GCP上のMySQLへ接続し(略)

さて。タイトル通り。

Caused by: java.lang.NoSuchMethodError: com.google.cloud.sql.core.SslSocketFactory.listIpTypes(Ljava/lang/String;)Ljava/util/List;
    at com.google.cloud.sql.mysql.SocketFactory.connect(SocketFactory.java:73)
    at com.google.cloud.sql.mysql.SocketFactory.connect(SocketFactory.java:40)
    at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:66)
    at com.mysql.cj.NativeSession.connect(NativeSession.java:152)
    at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:982)
    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:852)
    at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:444)
    at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:230)
    at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:226)

とか、

Caused by: java.lang.AbstractMethodError: Receiver class com.google.cloud.sql.mysql.SocketFactory does not define or inherit an implementation of the resolved method abstract connect(Ljava/lang/String;ILcom/mysql/cj/conf/PropertySet;I)Ljava/io/Closeable; of interface com.mysql.cj.protocol.SocketFactory.
    at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:65)
    at com.mysql.cj.NativeSession.connect(NativeSession.java:152)
    at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:955)
    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825)
    at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:455)
    at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:240)
    at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:207)

とか言われて辛みしかありません。

RDSなら標準のJDBCドライバで何の苦労もなく接続できるのに…めちゃ遅いけど。

結論:この組み合わせを使え

mysql-socket-factory-connector-jなどのソースなど諸々を眺めて見た結果、

  • mysql-socket-factory-connector-j-8-1.0.11.jar
  • jdbc-socket-factory-core-1.0.11.jar
  • mysql-connector-java-8.0.11.jar

じゃないと動かないということがわかりました。

mysql-connector-javaの最新版は8.0.13ですが、動きません

jdbc-socket-factory-core-1.0.10.jarでも動きません。