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)。

spring boot中mysql驱动加载过程

spring boot中mysql驱动加载过程

4、在加载com.mysql.jdbc.Driver类时,会执行他的静态块DriverManager.registerDriver(new Driver());。将自己的Driver注册到DriverManager的list中。

spring boot中mysql驱动加载过程

5、回到第2步,DriverManager类加载到JVM后,DriverManager.getDriver也就回去到了各厂商的数据库驱动。

6、根据yml配置的数据库类型,进行选择一种数据库驱动。

spring boot中mysql驱动加载过程