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

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

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

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.
pxq42qpu

pxq42qpu16#

// The newInstance() call is a work around for some
        // broken Java implementations
        Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
cgh8pdjw

cgh8pdjw17#

我通过改变解决了这个问题 application.properties 属于

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

希望有帮助

41ik7eoe

41ik7eoe18#

句子“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之间的区别?。

56lgkhnf

56lgkhnf19#

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

v09wglhw

v09wglhw20#

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

beq87vna

beq87vna21#

将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"
      }
    }
  }
}

相关问题