SpringBoot配置MySQL5.7與MySQL8.0的異同點(diǎn)詳解
引言
MySQL 是 Java 開發(fā)中最常用的數(shù)據(jù)庫之一,而 Spring Boot 提供了便捷的配置方式。隨著 MySQL 8.0 的普及,許多開發(fā)者需要從 MySQL 5.7 升級(jí)到 8.0。在實(shí)際開發(fā)中,二者的配置方式既有相似之處,也有一些需要特別注意的不同點(diǎn)。本文將從以下幾個(gè)方面展開討論,并提供代碼案例:
- Spring Boot 的基礎(chǔ)配置回顧
- MySQL 5.7 和 8.0 的主要特性差異
- Spring Boot 配置 MySQL 5.7 和 8.0 的異同點(diǎn)
- 代碼案例:配置與連接測試
- 總結(jié)
一、Spring Boot 的基礎(chǔ)配置回顧
在 Spring Boot 中,數(shù)據(jù)庫的配置通常是通過 application.properties 或 application.yml 文件完成的。默認(rèn)情況下,Spring Boot 使用 HikariCP 作為數(shù)據(jù)源連接池,并通過 spring.datasource 前綴配置數(shù)據(jù)庫連接信息。
基礎(chǔ)配置格式如下:
# 數(shù)據(jù)庫連接信息 spring.datasource.url=jdbc:mysql://localhost:3306/testdb spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # JPA 配置 spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
二、MySQL 5.7 和 8.0 的主要特性差異
MySQL 5.7 是一個(gè)成熟穩(wěn)定的版本,許多企業(yè)仍在使用;而 MySQL 8.0 則在性能、功能和安全性方面進(jìn)行了顯著改進(jìn)。
1. 新特性對比
特性 | MySQL 5.7 | MySQL 8.0 |
---|---|---|
默認(rèn)字符集 | latin1 | utf8mb4 |
排序規(guī)則 | utf8_general_ci | utf8mb4_0900_ai_ci |
JSON 支持 | 基本支持 JSON 數(shù)據(jù)類型 | 提供了更強(qiáng)大的 JSON 函數(shù)支持 |
身份驗(yàn)證插件 | mysql_native_password | 默認(rèn)使用 caching_sha2_password |
數(shù)據(jù)字典存儲(chǔ) | 文件系統(tǒng) | 數(shù)據(jù)存儲(chǔ)在 InnoDB 表中 |
性能優(yōu)化 | 無顯著變化 | 支持窗口函數(shù)、公共表表達(dá)式等 |
2. 身份驗(yàn)證機(jī)制的變化
- MySQL 5.7 默認(rèn)使用
mysql_native_password
身份驗(yàn)證插件。 - MySQL 8.0 默認(rèn)使用
caching_sha2_password
身份驗(yàn)證插件,這對連接驅(qū)動(dòng)程序提出了更高的要求,舊版 MySQL 驅(qū)動(dòng)可能無法正常工作。
三、Spring Boot 配置 MySQL 5.7 和 8.0 的異同點(diǎn)
1. 配置相同點(diǎn)
無論使用 MySQL 5.7 還是 8.0,Spring Boot 的基本配置方式是相同的,依賴的配置項(xiàng)包括:
- 數(shù)據(jù)庫連接 URL (
spring.datasource.url
) - 數(shù)據(jù)庫用戶名和密碼
- 數(shù)據(jù)庫驅(qū)動(dòng)類名
2. 配置不同點(diǎn)
(1)字符集與排序規(guī)則
MySQL 5.7 默認(rèn)字符集為 latin1
,而 8.0 則升級(jí)為 utf8mb4
。為確保跨版本兼容性,應(yīng)顯式指定字符集和排序規(guī)則:
配置示例:
# MySQL 8.0 的 URL 推薦格式 spring.datasource.url=jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=utf8mb4&serverTimezone=UTC&useSSL=false
(2)驅(qū)動(dòng)依賴
MySQL 8.0 需要使用新版的 MySQL JDBC 驅(qū)動(dòng)(mysql-connector-java
)。
依賴配置:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> <!-- 5.1.x 適用于 MySQL 5.7 --> </dependency>
(3)身份驗(yàn)證插件
MySQL 8.0 的默認(rèn)身份驗(yàn)證插件是 caching_sha2_password
。如果遇到連接問題,可以將用戶的身份驗(yàn)證插件切換回 mysql_native_password
:
切換命令:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
四、代碼案例:配置與連接測試
以下是 Spring Boot 項(xiàng)目中分別連接 MySQL 5.7 和 8.0 的代碼案例:
1. 數(shù)據(jù)庫配置文件
MySQL 5.7
application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect
MySQL 8.0
application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=utf8mb4&serverTimezone=UTC&useSSL=false spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
2. 測試代碼
創(chuàng)建一個(gè)簡單的 User
實(shí)體類,并通過 Spring Data JPA
進(jìn)行 CRUD 操作:
實(shí)體類:
import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private String email; // Getters and setters omitted for brevity }
數(shù)據(jù)訪問層:
import org.springframework.data.jpa.repository.JpaRepository; public interface UserRepository extends JpaRepository<User, Long> { }
測試類:
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; @Component public class DatabaseTest implements CommandLineRunner { @Autowired private UserRepository userRepository; @Override public void run(String... args) throws Exception { User user = new User(); user.setName("豪哥"); user.setEmail("hao@example.com"); userRepository.save(user); System.out.println("User saved: " + user); } }
五、總結(jié)
相似點(diǎn):
- 基本的配置方法和結(jié)構(gòu)一致,Spring Boot 的自動(dòng)化配置機(jī)制使得開發(fā)體驗(yàn)相同。
差異點(diǎn):
- 字符集和排序規(guī)則: MySQL 8.0 默認(rèn)支持更強(qiáng)的字符集和排序規(guī)則,應(yīng)顯式配置為
utf8mb4
。 - 驅(qū)動(dòng)依賴: MySQL 8.0 必須使用新版驅(qū)動(dòng),兼容性更高。
- 身份驗(yàn)證機(jī)制: MySQL 8.0 默認(rèn)使用更安全的
caching_sha2_password
,但可以切換回mysql_native_password
。
- 字符集和排序規(guī)則: MySQL 8.0 默認(rèn)支持更強(qiáng)的字符集和排序規(guī)則,應(yīng)顯式配置為
通過本文的對比與案例,相信你可以輕松完成 MySQL 5.7 和 8.0 的 Spring Boot 項(xiàng)目配置,也能更加高效地處理版本升級(jí)過程中可能遇到的問題。
以上就是SpringBoot配置MySQL5.7與MySQL8.0的異同點(diǎn)詳解的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot MySQL5.7與MySQL8.0異同的資料請關(guān)注腳本之家其它相關(guān)文章!
- 詳解如何在SpringBoot中配置MySQL數(shù)據(jù)庫的連接數(shù)
- SpringBoot從Nacos讀取MySQL數(shù)據(jù)庫配置錯(cuò)誤:Public Key Retrieval is not allowed的解決方案
- SpringBoot如何配置MySQL和Oracl雙數(shù)據(jù)源(Mybatis)
- SpringBoot整合mysql、postgres及sqlserver實(shí)現(xiàn)多數(shù)據(jù)源配置實(shí)戰(zhàn)案例
- 解讀springboot配置mybatis的sql執(zhí)行超時(shí)時(shí)間(mysql)
相關(guān)文章
Java通過MySQL的加解密函數(shù)實(shí)現(xiàn)敏感字段存儲(chǔ)
這篇文章主要介紹了如何在Java中MySQL的加解密函數(shù)實(shí)現(xiàn)敏感字段存儲(chǔ),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-03-03Spring?Boot項(xiàng)目抵御XSS攻擊實(shí)戰(zhàn)過程
XSS攻擊又稱跨站腳本攻擊,通常指利用網(wǎng)頁開發(fā)時(shí)留下的漏洞,通過巧妙的方法注入惡意指令代碼到網(wǎng)頁,使用戶加載并執(zhí)行攻擊者惡意制造的網(wǎng)頁程序,下面這篇文章主要給大家介紹了關(guān)于Spring?Boot項(xiàng)目抵御XSS攻擊的相關(guān)資料,需要的朋友可以參考下2022-11-11如何使用stream從List對象中獲取某列數(shù)據(jù)
這篇文章主要介紹了如何使用stream從List對象中獲取某列數(shù)據(jù)問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12SpringBoot整合Quartz實(shí)現(xiàn)動(dòng)態(tài)配置的代碼示例
這篇文章將介紹如何把Quartz定時(shí)任務(wù)做成接口,實(shí)現(xiàn)以下功能的動(dòng)態(tài)配置添加任務(wù),修改任務(wù),暫停任務(wù),恢復(fù)任務(wù),刪除任務(wù),任務(wù)列表,任務(wù)詳情,文章通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07MyBatis Plus更新對象無法設(shè)空值解決方案
這篇文章主要介紹了MyBatis Plus更新對象無法設(shè)空值解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11解決子線程無法訪問父線程中通過ThreadLocal設(shè)置的變量問題
這篇文章主要介紹了解決子線程無法訪問父線程中通過ThreadLocal設(shè)置的變量問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07SpringBoot2.x漏洞將logback1.2.x 升級(jí)至1.3.x
安全部門在代碼漏洞掃描中發(fā)現(xiàn)logback 1.2.x版本存在CVE漏洞,建議升級(jí)至1.3.x版本,本文就來介紹了logback1.2.x 升級(jí)至1.3.x,具有一定的參考價(jià)值,感興趣的可以了解一下2024-09-09