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配置的数据库类型,进行选择一种数据库驱动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值