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

MySQL の JDBC ドライバのサービスプロバイダの設定は Ant で生成されてた

https://docs.oracle.com/javase/8/docs/api/java/sql/DriverManager.html

The DriverManager methods getConnection and getDrivers have been enhanced to support the Java Standard Edition Service Provider mechanism. JDBC 4.0 Drivers must include the file META-INF/services/java.sql.Driver. This file contains the name of the JDBC drivers implementation of java.sql.Driver. For example, to load the my.sql.Driver class, the META-INF/services/java.sql.Driver file would contain the entry:

my.sql.Driver

https://docs.oracle.com/javase/jp/6/api/java/sql/DriverManager.html

DriverManager メソッド getConnection と getDrivers は、Java Standard Edition サービスプロバイダメカニズムをサポートするように拡張されました。JDBC 4.0 ドライバは、ファイル META-INF/services/java.sql.Driver を含める必要があります。このファイルには、java.sql.Driver の JDBC ドライバ実装の名前が含まれます。たとえば my.sql.Driver クラスをロードするために、META-INF/services/java.sql.Driver ファイルに次のエントリが含まれます。

my.sql.Driver

なのでへ~と思って mysqlJDBC ドライバのコード見てみる.

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

どっかに java.sql.Driver という記述ないかなーと探してみたらなんと build.xml の中に書かれた.

 548         <!-- JDBC4+ support of service provider mechanism. -->
 549         <mkdir dir="${buildDir}/${fullProdName}/META-INF/services/" />
 550         <echo file="${buildDir}/${fullProdName}/META-INF/services/java.sql.Driver"
 551               message="com.mysql.jdbc.Driver${line.separator}com.mysql.fabric.jdbc.FabricMySQLDriver" />

CHANGES を見ると 5.0 担った時に追加されたのねー.

2248 12-23-05 - Version 5.0.0-beta
...
2308     - Added service-provider entry to META-INF/services/java.sql.Driver
2309       for JDBC-4.0 support.

という感想.

っていうか他にも書かれたところかかれてないということは java.sql.DriverManager 経由で取得できるドライバって普通 FabricMySQLDriver が使われるってことですかね.

と思ったけどよく見たら line.separator で区切られてるので下記二つのドライバが読み込まれるってことっぽいですね.

ってことで build.xml で echo できるってのと Fabric 用のドライバってデフォルトでセットされてるんですねって知見が得られた.

nise-nabe/mysql-driver-test · GitHub