読者です 読者をやめる 読者になる 読者になる

MySQL Connector/J 6.0 の Service Provider について

下記 記事は Connector/J 5.1 についての記事。

nisenabe.hatenablog.com

6.0 の場合は

$ curl -L -O https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-6.0.3.tar.gz
$ tar xvf mysql-connector-java-6.0.3.tar.gz
$ cd mysql-connector-java-6.0.3

build.xml を確認してみると下記のようになってます。

 592         <!-- JDBC 4+ support of service provider mechanism. -->
 593         <mkdir dir="${com.mysql.cj.build.dir.driver}/META-INF/services/" />
 594         <echo file="${com.mysql.cj.build.dir.driver}/META-INF/services/java.sql.Driver"
 595               message="com.mysql.cj.jdbc.Driver" />

じゃあどのドライバを使うかというのはどこで決めてるかというと ConnectionString クラスらしい。

src/main/java/com/mysql/cj/core/ConnectionString.java
 55         SINGLE_CONNECTION("jdbc:mysql://") {
 58         LOADBALANCING_CONNECTION("jdbc:mysql:loadbalance://") {
 70         FAILOVER_CONNECTION("jdbc:mysql://") {
 82         REPLICATION_CONNECTION("jdbc:mysql:replication://") {
144         FABRIC_CONNECTION("jdbc:mysql:fabric://") {
155         X_SESSION("mysql:x://") {

ちなみに 5.1 では下記のように場所がばらけているうえにわりと力技っぽく解決してるので 6.0 でだいぶ綺麗に書きなおされているらしいということがわかる。

src/com/mysql/jdbc/NonRegisteringDriver.java
 63     private static final String REPLICATION_URL_PREFIX = "jdbc:mysql:replication://";
 65     private static final String URL_PREFIX = "jdbc:mysql://";
 67     private static final String MXJ_URL_PREFIX = "jdbc:mysql:mxj://";
 69     public static final String LOADBALANCE_URL_PREFIX = "jdbc:mysql:loadbalance://";
src/com/mysql/fabric/jdbc/FabricMySQLDriver.java
 97         if (!url.startsWith("jdbc:mysql:fabric://")) {