MySQL Connector/J 6.0 の Service Provider について
下記 記事は Connector/J 5.1 についての記事。
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://")) {