92 votes

Chargement de la classe `com.mysql.jdbc.Driver'. Cette classe est obsolète. La nouvelle classe de pilote est `com.mysql.cj.jdbc.Driver'.

C'est l'avertissement que je reçois dans la console, je suis confus avec cet avertissement :

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.

89voto

Wei Chun Points 847

J'ai résolu ce problème en changeant application.properties de

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

à

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

J'espère que cela aidera

24voto

Yogev Points 61

Si vous utilisez Hibernate, modifiez ce qui suit dans votre fichier "hibernate.cfg.xml" :

<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

A :

<property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>

Cela devrait faire l'affaire :)

23voto

Dmitry Sokolyuk Points 155

Selon Changements dans l'API Connector/J "Le nom de la classe qui implémente java.sql.Driver dans MySQL Connector/J a changé de com.mysql.jdbc.Driver a com.mysql.cj.jdbc.Driver . L'ancien nom de classe a été déprécié."

Cela signifie qu'il suffit de changer le nom du conducteur :

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

à

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

8voto

N. Girijah Points 101

Changez la propriété du pilote dans votre fichier de configuration ORM de

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

à

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

Cela résoudra l'avertissement :-)

7voto

Xiu Points 170

La phrase "Loading class 'com.mysql.jdbc.Driver'. Cette classe est obsolète. La nouvelle classe de pilote est 'com.mysql.cj.jdbc.Driver'" est claire. Vous devez utiliser le pilote le plus récent, comme ceci :

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

Et dans mysql-connector-java-8.0.17. Vous trouverez que la classe com.mysql.jdbc.Driver ne fournit plus de service. (Vous pouvez aussi trouver l'avertissement venu d'ici).

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.");
    }
}

La phrase "Le pilote est automatiquement enregistré via l'interface SPI et le chargement manuel de la classe du pilote est généralement inutile". Cela signifie qu'il est possible d'écrire un code comme celui-ci :

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

Grâce à SPI, le pilote est automatiquement enregistré. Comment cela fonctionne-t-il ? Vous pouvez le trouver dans java.sql.DriverManager :

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

Et dans votre mysql-connector-java-XXX.jar, vous pouvez également trouver le fichier 'java.sql.Driver' dans le META-INF. \services. Le fichier est le suivant :

com.mysql.cj.jdbc.Driver

Lorsque vous exécutez DriverManager.getConnection(), le bloc statique s'exécute également. Ainsi, le pilote peut être enregistré automatiquement dans le fichier 'java.sql.Driver'.

Et plus sur SPI -> Différence entre SPI et API ? .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X