因为业务需要程序中重写了jdbc Driver类.com.jdbc.JlinsDriver并使用static 直接
1 class.forName(com.jdbc.JlinsDriver);
因其他业务需求在执行如下代码的时候
1 Class.forName("oracle.jdbc.OracleDriver");
2 connection = DriverManager.getConnection(firstlyUrl, info);
发现程序直接跳到了 com.jdbc.JlinsDriver 类里面去了,
翻看了 DriverManager 源代码发现 每 次class.forName的时候会把驱动按照顺序放到ArrayList<Dirver> theDrivers 当中,每次 getConnection的时候从第一个开始加载,如果第一个返回不正确则加载第二个,在每个dirver实现类里面都会有 acceptsURL(String url)方法来验证当前的url是否符合当前的驱动,如下代码(IBM JDK),
java标准jdk实现方式差不多
java代码
1 for (Driver theDriver : theDrivers) {
2 Connection theConnection = theDriver.connect(url, info);
3 if (theConnection != null) {
4 return theConnection;
5 }
6 }