在新電腦上安裝了MySQL8.0,打開原來的一個項目去連接時,報如下錯誤
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
Caused by: java.lang.NullPointerException
at com.mysql.jdbc.ConnectionImpl.getServerCharset(ConnectionImpl.java:3005)
at com.mysql.jdbc.MysqlIO.sendConnectionAttributes(MysqlIO.java:1916)
at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1845)
經排查,是因為JDBC驅動版本問題導致的,項目原來使用的MySQL版本是5.X,現在使用MySQL8.0,驅動需要相應的跟新,如下:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <!--<scope>runtime</scope>--> <version>8.0.11</version> </dependency>
另外,application.properties文件中的數據庫配置項也需要相應變化:
spring.datasource.url=jdbc:mysql://localhost:3306/toutiao?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8 spring.datasource.username=root spring.datasource.password=789456123 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
url 需要添加時區設置:
&serverTimezone=GMT%2B8(GMT%2B8
代表東八區)
也可設置為:serverTimezone=UTC serverTimezone=Shanghai(會比中國時間早8個小時,如果在中國,可以選擇Asia/Shanghai或者Asia/Hongkong)
如果mysql-connector-java用的6.0以上的
如果MySQL-connector-java用的6.0以上的,則driver要使用:
com.mysql.cj.jdbc.Driver
如果未明確設置,MySQL 5.5.45+, 5.6.26+ and 5.7.6+版本默認要求建立SSL連接。
為了符合當前不使用SSL連接的應用程序,verifyServerCertificate屬性設置為’false’。
如果你不需要使用SSL連接,你需要通過設置useSSL=false來顯式禁用SSL連接。
如果你需要用SSL連接,就要為服務器證書驗證提供信任庫,並設置useSSL=true
SSL – Secure Sockets Layer(安全套接層)