mysql - "com.mysql.cj.jdbc.Driver"的SPI自动注册中的混淆

标签 mysql jakarta-ee jdbc

<分区>

最近我一直在使用 JDBC 开发 Java Web 应用程序,我发现 com.mysql.jdbc.Driver 自“Connector/J API 8.0”以来已被弃用。

因此,如下所示,Java 运行时会警告您使用 com.mysql.cj.jdbc.Driver,而不是使用已弃用的驱动程序。

Loading class `com.mysql.jdbc.Driver'. This is deprecated.
The new driver class is `com.mysql.cj.jdbc.Driver'.
The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.

我的问题真正在于这条线。

The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.

起初,我以为这意味着不需要调用Class.forName来注册驱动程序,但经过测试,我发现我错了。

那么通常不需要手动加载驱动程序类到底是什么意思?有什么我错过的吗?

谢谢。

最佳答案

MySQL Connector/J 开发人员指南仍然引用 Class.forName。参见 https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-usagenotes-connect-drivermanager.html

但是从JDBC 4开始,使用了Service Provider Interface,所以应该不再需要调用了。 (对我来说,它可以在没有 Class.forName 调用的情况下工作!)

有关 SPI 的详细信息:

关于mysql - "com.mysql.cj.jdbc.Driver"的SPI自动注册中的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56093762/

相关文章:

java - Seam:相当于 components.xml 中的@Startup?

java - 字符编码过滤器,韩文字符编码问题

java - 仅允许通过 sql server 、 oracle 和 postgres 中的 jdbc 对表进行更新

java - 您可以将 JDBC 与代号一一起使用吗?

mysql - codeigniter:类似事件记录的子句不起作用

mysql - 简单的 SQL 案例问题——当 NULL 时返回 0

mysql - Airflow:Celery worker MySQL 连接过多

c# - 数据源到 asp 日历

java - 每次更改我的 Java 代码时,我可以阻止重新启动我的应用程序吗?

arrays - RowMapper 的 Spring jdbc 模板的单元测试用例