java jdbc加载驱动的顺序
2478 点击·0 回帖
![]() | ![]() | |
![]() | 因为业务需要程序中重写了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 } | |
![]() | ![]() |