美文网首页
JDBC中SPI机制梳理

JDBC中SPI机制梳理

作者: _小毛驴 | 来源:发表于2021-01-26 13:56 被阅读0次

运行环境:Windows 10 ;IDEA-2019.3;Tomcat 9.0.24;jdk 1.8.0_221;mybatis-plus 3.4.2;p6spy 3.9.1;
mysql-connector-java 8.0.16;

缘起

在SSM框架中,我打算把Mybatis替换为Mybatis-plus。这个过程还算是简单的。在集成Mybatis-plus的p6spy插件的sql打印的时候,就遇到了问题。
按官方文档,我配置好之后,启动也是没有问题的,但是,一旦访问页面,请求数据库时,就找不到mysql的jdbc驱动了。
按照原理分析,配置了p6spy之后,加载流程就变成了这样的了。

image.png

所以,按照当前mybatis-plus的配置,应该是使用了p6spy的URL配置方式,p6spy驱动 主动去发现mysql的驱动,然后做代理。在这个地方,p6spy就出问题了,发现不了mysql驱动。
这里修改为p6spy的datasource配置方式的话,在配置中,我们显式的指明了要被代理的mysql驱动,就不会找不到mysql驱动了。

SPI机制

在折腾上面问题的过程中,遇到了一个拦路虎。那就是SPI机制。
SPI ,全称为 Service Provider Interface,是一种服务发现机制。它通过在ClassPath路径下的META-INF/services文件夹查找文件,自动加载文件里所定义的类。
在我看来,有点类似于spring的控制反转。把对象使用和实现拆分开来,达到解耦的目的。
在这里,mysql的jdbc驱动提供了Driver接口的具体实现。数据库连接池在使用DriverManager的过程中,发现Driver的所有实现类。客户端,在实际使用的过程中,就可以直接调用具体的Driver实现,连接数据库了。
示例图如下:


image.png

附录

引用了部分:清幽之地 - https://www.jianshu.com/p/3a3edbcd8f24

相关文章

  • JDBC中SPI机制梳理

    运行环境:Windows 10 ;IDEA-2019.3;Tomcat 9.0.24;jdk 1.8.0_221;...

  • Dubbo SPI 机制

    前提 Dubbo的SPI是从JDK的SPI 扩展加强而来的。 JDK中SPI 机制如下(可以查看JDBC的实现) ...

  • Java SPI 机制解析

    本文以JDBC为例深入讲解 java spi 机制,将帮助你理解:什么是SPI,SPI实现原理,SPI的使用和SP...

  • Java服务提供框架

    本文探讨Effective Java E3 CH2中提到的服务提供框架,引申点有JDBC实现、SPI机制等。 原文...

  • dubbo原理:SPI机制(二)

    在上一篇:SPI机制(一)中研究了Dubbo SPI的自适应原理;SPI机制(二)中我们来研究下Dubbo SPI...

  • dubbo的spi机制

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

  • Java中的SPI机制及接口多实现调用

    Java中的SPI机制及接口多实现调用 0x00 SPI机制 SPI 全称为 (Service Provider ...

  • SPI机制(jdk, dubbo, spring)

    1.SPI概述 2.jdk中的SPI机制(jdk1.6开始) 2.1基本要求 3.dubbo中的SPI机制 htt...

  • dubbo 原理解析

    rpc 流程:1、dubbo spi 中的 warp 机制,实现类增强2、dubbo spi 中的自适应机制,通过...

  • 轻量级RPC设计与实现第四版

    在本版本中引入了SPI机制,关于Java的SPI机制与Dubbo的SPI机制在以前的文章中介绍过。传送门:Dubb...

网友评论

      本文标题:JDBC中SPI机制梳理

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