spring boot中mysql驅動加載過程

1、我們一般選擇的Datasoure工具類
 private static final String[] DATA_SOURCE_TYPE_NAMES = new String[] { "org.apache.tomcat.jdbc.pool.DataSource", "com.zaxxer.hikari.HikariDataSource", "org.apache.commons.dbcp.BasicDataSource", // deprecated "org.apache.commons.dbcp2.BasicDataSource" };

2、選擇HikariDataSource爲例,在內部的getConnection()方法,使用了延遲加載數據庫驅動的方式。在new HikariPool(this)代碼裏->super(config)->initializeDataSource()->new DriverDataSource(jdbcUrl, driverClassName, dataSourceProperties, username, password)裏有DriverManager.getDrivers(); 

3、jvm機會檢查是否已經加載過類DriverManager,如果沒有加載過,就加載類DriverManager,執行他的靜態塊,靜態塊裏會執行ServiceLoader.load(Driver.class)獲取所有jar包下META-INFO/services/java.sql.Driver文件裏面的內容(SPI機制)。並進行類加載器加載這些各廠商的實現類(如com.mysql.jdbc.Driver)。

4、在加載com.mysql.jdbc.Driver類時,會執行他的靜態塊DriverManager.registerDriver(new Driver());。將自己的Driver註冊到DriverManager的list中。

5、回到第2步,DriverManager類加載到JVM後,DriverManager.getDriver也就回去到了各廠商的數據庫驅動。

6、根據yml配置的數據庫類型,進行選擇一種數據庫驅動。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章