SpringBoot配置MySQL5.7与MySQL8.0的异同点详解

 更新时间:2024年12月03日 08:55:35   作者:码农阿豪  
MySQL 是 Java 开发中最常用的数据库之一,而 Spring Boot 提供了便捷的配置方式,随着 MySQL 8.0 的普及,许多开发者需要从 MySQL 5.7 升级到 8.0,在实际开发中,二者的配置方式既有相似之处,也有一些需要特别注意的不同点,所以本文给大家详细介绍了它们的异同点

引言

MySQL 是 Java 开发中最常用的数据库之一,而 Spring Boot 提供了便捷的配置方式。随着 MySQL 8.0 的普及,许多开发者需要从 MySQL 5.7 升级到 8.0。在实际开发中,二者的配置方式既有相似之处,也有一些需要特别注意的不同点。本文将从以下几个方面展开讨论,并提供代码案例:

  1. Spring Boot 的基础配置回顾
  2. MySQL 5.7 和 8.0 的主要特性差异
  3. Spring Boot 配置 MySQL 5.7 和 8.0 的异同点
  4. 代码案例:配置与连接测试
  5. 总结

一、Spring Boot 的基础配置回顾

在 Spring Boot 中,数据库的配置通常是通过 application.properties 或 application.yml 文件完成的。默认情况下,Spring Boot 使用 HikariCP 作为数据源连接池,并通过 spring.datasource 前缀配置数据库连接信息。

基础配置格式如下:

# 数据库连接信息
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 是一个成熟稳定的版本,许多企业仍在使用;而 MySQL 8.0 则在性能、功能和安全性方面进行了显著改进。

1. 新特性对比

特性MySQL 5.7MySQL 8.0
默认字符集latin1utf8mb4
排序规则utf8_general_ciutf8mb4_0900_ai_ci
JSON 支持基本支持 JSON 数据类型提供了更强大的 JSON 函数支持
身份验证插件mysql_native_password默认使用 caching_sha2_password
数据字典存储文件系统数据存储在 InnoDB 表中
性能优化无显著变化支持窗口函数、公共表表达式等

2. 身份验证机制的变化

  • MySQL 5.7 默认使用 mysql_native_password 身份验证插件。
  • MySQL 8.0 默认使用 caching_sha2_password 身份验证插件,这对连接驱动程序提出了更高的要求,旧版 MySQL 驱动可能无法正常工作。

三、Spring Boot 配置 MySQL 5.7 和 8.0 的异同点

1. 配置相同点

无论使用 MySQL 5.7 还是 8.0,Spring Boot 的基本配置方式是相同的,依赖的配置项包括:

  • 数据库连接 URL (spring.datasource.url)
  • 数据库用户名和密码
  • 数据库驱动类名

2. 配置不同点

(1)字符集与排序规则

MySQL 5.7 默认字符集为 latin1,而 8.0 则升级为 utf8mb4。为确保跨版本兼容性,应显式指定字符集和排序规则:

配置示例:

# MySQL 8.0 的 URL 推荐格式
spring.datasource.url=jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=utf8mb4&serverTimezone=UTC&useSSL=false

(2)驱动依赖

MySQL 8.0 需要使用新版的 MySQL JDBC 驱动(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)身份验证插件

MySQL 8.0 的默认身份验证插件是 caching_sha2_password。如果遇到连接问题,可以将用户的身份验证插件切换回 mysql_native_password

切换命令:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

四、代码案例:配置与连接测试

以下是 Spring Boot 项目中分别连接 MySQL 5.7 和 8.0 的代码案例:

1. 数据库配置文件

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. 测试代码

创建一个简单的 User 实体类,并通过 Spring Data JPA 进行 CRUD 操作:

实体类:

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
}

数据访问层:

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

五、总结

  • 相似点:

    • 基本的配置方法和结构一致,Spring Boot 的自动化配置机制使得开发体验相同。
  • 差异点:

    • 字符集和排序规则: MySQL 8.0 默认支持更强的字符集和排序规则,应显式配置为 utf8mb4
    • 驱动依赖: MySQL 8.0 必须使用新版驱动,兼容性更高。
    • 身份验证机制: MySQL 8.0 默认使用更安全的 caching_sha2_password,但可以切换回 mysql_native_password

通过本文的对比与案例,相信你可以轻松完成 MySQL 5.7 和 8.0 的 Spring Boot 项目配置,也能更加高效地处理版本升级过程中可能遇到的问题。

以上就是SpringBoot配置MySQL5.7与MySQL8.0的异同点详解的详细内容,更多关于SpringBoot MySQL5.7与MySQL8.0异同的资料请关注脚本之家其它相关文章!

相关文章

  • Java中三种常用布局方式小结

    Java中三种常用布局方式小结

    在Java Swing和JavaFX中,布局管理器(Layout Managers)用于控制组件(如按钮、文本框等)在容器(如窗口、面板等)内的位置和大小,下面介绍Java Swing中常用的三种布局方式,需要的朋友可以参考下
    2025-02-02
  • Java通过MySQL的加解密函数实现敏感字段存储

    Java通过MySQL的加解密函数实现敏感字段存储

    这篇文章主要介绍了如何在Java中MySQL的加解密函数实现敏感字段存储,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-03-03
  • Spring Boot项目抵御XSS攻击实战过程

    Spring Boot项目抵御XSS攻击实战过程

    XSS攻击又称跨站脚本攻击,通常指利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序,下面这篇文章主要给大家介绍了关于Spring Boot项目抵御XSS攻击的相关资料,需要的朋友可以参考下
    2022-11-11
  • 如何使用stream从List对象中获取某列数据

    如何使用stream从List对象中获取某列数据

    这篇文章主要介绍了如何使用stream从List对象中获取某列数据问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • SpringBoot整合Quartz实现动态配置的代码示例

    SpringBoot整合Quartz实现动态配置的代码示例

    这篇文章将介绍如何把Quartz定时任务做成接口,实现以下功能的动态配置添加任务,修改任务,暂停任务,恢复任务,删除任务,任务列表,任务详情,文章通过代码示例介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • 一文带你搞懂Java中线程的创建方式

    一文带你搞懂Java中线程的创建方式

    这篇文章主要为大家详细介绍了Java中线程的创建方式的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以了解一下
    2023-03-03
  • MyBatis Plus更新对象无法设空值解决方案

    MyBatis Plus更新对象无法设空值解决方案

    这篇文章主要介绍了MyBatis Plus更新对象无法设空值解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • 解决子线程无法访问父线程中通过ThreadLocal设置的变量问题

    解决子线程无法访问父线程中通过ThreadLocal设置的变量问题

    这篇文章主要介绍了解决子线程无法访问父线程中通过ThreadLocal设置的变量问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • SpringBoot2.x漏洞将logback1.2.x 升级至1.3.x

    SpringBoot2.x漏洞将logback1.2.x 升级至1.3.x

    安全部门在代码漏洞扫描中发现logback 1.2.x版本存在CVE漏洞,建议升级至1.3.x版本,本文就来介绍了logback1.2.x 升级至1.3.x,具有一定的参考价值,感兴趣的可以了解一下
    2024-09-09
  • Spring如何基于注解配置使用ehcache

    Spring如何基于注解配置使用ehcache

    这篇文章主要介绍了Spring如何基于注解配置使用ehcache,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10

最新评论