正在加载类“com.mysql.jdbc.driver”这是不赞成的新的驱动程序类是“com.mysql.cj.jdbc.driver”

jbose2ul  于 2021-06-20  发布在  Mysql
关注(0)|答案(21)|浏览(968)

这是我在控制台得到的警告,我与这个警告混淆了:

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.
1wnzp6jl

1wnzp6jl1#

通过将驱动程序名从“com.mysql.jdbc.driver”更改为“com.mysql.cj.jdbc.driver”,可以解决这个问题。
如果是简单的jdbc连接: Class.forName("com.mysql.cj.jdbc.Driver"); 在休眠的情况下: <property name="driver" value="com.mysql.cj.jdbc.Driver"/>

csbfibhn

csbfibhn2#

这是因为要连接的mysql版本低于mysql驱动程序的版本。很多人都说com.mysql.jdbc.driver改为com.mysql.cj.jdbc.driver,虽然这不能解决问题,但也应该引起注意。

ve7v8dk2

ve7v8dk23#

以我的经验。我在使用jsp进行web应用。当时我使用mysql 5和mysql connecter jar 8。所以由于版本问题,我面临这种问题。我通过将mysql连接器jar文件替换为mysql的确切版本来解决这个问题。

kb5ga3dv

kb5ga3dv4#

如果使用基于yml文件的配置,则需要在给定文件内调整以下属性: *driverClassName: com.mysql.cj.jdbc.Driver*

bmvo0sr5

bmvo0sr55#

驱动程序是通过spi自动注册的,通常不需要手动加载驱动程序类。只需更改“com.mysql.cj.jdbc.driver”

n1bvdmb6

n1bvdmb66#

如果您直接使用log4jdbc spring boot starter库,也会出现此警告。
然而,有一个配置来选择正确的驱动程序自己。把这个放进你的口袋里 application.properties :

log4jdbc.drivers=com.mysql.cj.jdbc.Driver
log4jdbc.auto.load.popular.drivers=false

请参阅github上的文档

42fyovps

42fyovps7#

如果你有这个 application.properties : spring.datasource.driverClassName=com.mysql.jdbc.Driver ,
你可以去掉那一行来消除错误。

pod7payv

pod7payv8#

根据connector/japi中的更改“mysql connector/j中实现java.sql.driver的类的名称已从com.mysql.jdbc.driver更改为com.mysql.cj.jdbc.driver。旧类名已被弃用。“
这意味着您只需更改驱动程序的名称:

Class.forName("com.mysql.jdbc.Driver");

Class.forName("com.mysql.cj.jdbc.Driver");
oogrdqng

oogrdqng9#

句子“loading class'com.mysql.jdbc.driver”。这是不赞成的。新的驱动程序类是“com.mysql.cj.jdbc.driver”。您应该使用更新的驱动程序,如下所示:

Class.forName("com.mysql.cj.jdbc.Driver");

在mysql-connector-java-8.0.17中。您会发现com.mysql.jdbc.driver类不再提供服务(您还可以从这里找到警告。)

public class Driver extends com.mysql.cj.jdbc.Driver {
    public Driver() throws SQLException {
    }

    static {
        System.err.println("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.");
    }
}

“驱动程序是通过spi自动注册的,通常不需要手动加载驱动程序类。”这意味着编写这样的代码是可以的:

//Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/world?useSSL=false&serverTimezone=Asia/Shanghai","root","root");

由于spi,驱动程序将自动注册。它是如何工作的?您可以在java.sql.drivermanager中找到:

private static void ensureDriversInitialized() {
                          ...
    ServiceLoader<Driver> loadedDrivers = ServiceLoader.load(Driver.class);
                          ...
}

在mysql-connector-java-.jar中,还可以在meta inf\services中找到文件“java.sql.driver”。文件如下:

com.mysql.cj.jdbc.Driver

运行drivermanager.getconnection()时,静态块也会开始运行。所以驱动程序可以自动注册到文件“java.sql.driver”中。
更多关于spi->spi和api之间的区别?。

qxgroojn

qxgroojn10#

我的解决方案:org.springframework.boot2.0.5.release
而是:org.springframework.boot2.1.0.release

ohtdti5x

ohtdti5x11#

删除这部分就行了 Class.forName("com.mysql.jdbc.Driver") 从你的代码
因为机器发出警告
驱动程序通过spi自动注册,通常不需要手动加载驱动程序类。”
这意味着不需要包含它,因为默认情况下驱动程序会自动为您注册。

1rhkuytd

1rhkuytd12#

将application.conf文件更改如下。它解决了问题。
变更前:

slick {
  dbs {
    default {
      profile = "slick.jdbc.MySQLProfile$"
      db {
        driver = "com.mysql.jdbc.Driver"
        url = "jdbc:mysql://localhost:3306/test"
        user = "root"
        password = "root"
      }
    }
  }
}

变更后:

slick {
  dbs {
    default {
      profile = "slick.jdbc.MySQLProfile$"
      db {
        driver = "com.mysql.cj.jdbc.Driver"
        url = "jdbc:mysql://localhost:3306/test"
        user = "root"
        password = "root"
      }
    }
  }
}
0s0u357o

0s0u357o13#

connector/j api从5.1版到8.0版有一些重要的变化。如果使用的版本高于5.1,则可能需要相应地调整api调用。
有关更多信息,请访问mysql的以下链接https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-api-changes.html

iqxoj9l9

iqxoj9l914#

将orm配置文件中的驱动程序属性从

<property name="driver" value="com.mysql.jdbc.Driver"/>

<property name="driver" value="com.mysql.cj.jdbc.Driver"/>

这将解决警告:-)

txu3uszq

txu3uszq15#

工作示例:

Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_db_name?autoReconnect=true&useSSL=false", "root", "root");

像这样打电话会有用的。

相关问题