美文网首页
2. SPI的应用-java.sql.DriverManager

2. SPI的应用-java.sql.DriverManager

作者: WY_250e | 来源:发表于2018-04-26 21:43 被阅读0次

一般通过DriverManager.getConnection(url, username, password)拿到db的连接对象
我们具体跟下代码:

  1. DriverManager有下面的静态块将会首先执行
static {
        loadInitialDrivers();
        println("JDBC DriverManager initialized");
    }

private static void loadInitialDrivers() {
       ......
    
      // 主要代码就下面这些
      ServiceLoader<Driver> loadedDrivers = ServiceLoader.load(Driver.class);
      Iterator<Driver> driversIterator = loadedDrivers.iterator();
      try{
             while(driversIterator.hasNext()) {
                 driversIterator.next();
             }
         } catch(Throwable t) {
                // Do nothing
          }
    //其他代码,不管
    .......
}

从上面可以看到通过SPI拿到了所有Driver对象的实例,其中会对每个Driver实现类初始化

  1. 看下com.mysql.jdbc.Driver
static {
        try {
                        // 注册到DriverManager中去, 
            java.sql.DriverManager.registerDriver(new Driver());
        } catch (SQLException E) {
            throw new RuntimeException("Can't register driver!");
        }
    }
  1. DriverManager.getConnection()
for(DriverInfo aDriver : registeredDrivers) {
    if(isDriverAllowed(aDriver.driver, callerCL)) {
        try {
            // 获取Connection
            Connection con = aDriver.driver.connect(url, info);
            if (con != null) {
                return (con);
            }
        } catch (SQLException ex) {
            if (reason == null) {
                reason = ex;
            }
        }

    } else {
        println("skipping: " + aDriver.getClass().getName());
    }

}

参考
https://juejin.im/post/5a6036d5518825734107f96d
https://blog.csdn.net/xieyuooo/article/details/8502585

相关文章

  • 2. SPI的应用-java.sql.DriverManager

    一般通过DriverManager.getConnection(url, username, password)拿...

  • Java - SPI

    SPI简介 如何使用SPI 应用举例1. 组织方制定接口2. 实现方根据SPI规范实现接口3. 组织方加载实现类 ...

  • dubbo的spi机制

    SPI SPI是一种扩展机制,在java中SPI机制被广泛应用,比如Spring中的SpringServletCo...

  • Java连接access数据库方案

    import java.sql.Connection;import java.sql.DriverManager;...

  • JDBC批处理

    import java.sql.Connection;import java.sql.DriverManager;...

  • dubbo中扩展点

    1. filter 2.负载算法 3.容错算法 4. jdk中spi 和 dubbo中spi扩展

  • Java中SPI应用

    SPI介绍 Java中SPI的概念是一种服务发现的机制,从1.6开始支持该功能。具体来说就是一个接口有多个实现的时...

  • SPI简介与应用

    1、SPI简介: SPI的全称为(Service provider interface)是JDK内置的一种服务提供...

  • SPI与API

    SPI与我们熟知的API名字上有点相似,SPI被称为服务提供接口,API称为应用程序接口,两者的区别大致可以这样来...

  • SPI接口

    SPI接口扫盲 SPI定义/SPI时序(CPHA CPOL) SPI详解 SPI总线协议

网友评论

      本文标题:2. SPI的应用-java.sql.DriverManager

      本文链接:https://www.haomeiwen.com/subject/umfvlftx.html