MySQL Connector、Dialect与MySQL8.0不兼容,Spring Boot3.1.0连接失败求适配版本
解决MySQL 8.0与Spring Boot 3.1.0的兼容问题
核心问题定位
你的通信链接错误除了版本兼容因素,Hibernate Dialect配置错误是关键诱因——MySQL 8.0不能使用旧的org.hibernate.dialect.MySQLDialect,必须适配对应版本的Dialect。
经过验证的稳定版本组合
推荐方案:使用Spring Boot依赖管理(无需手动指定Connector版本)
Spring Boot 3.1.0的官方依赖管理已内置兼容的MySQL Connector/J版本,直接引入即可:
<dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> </dependency>
此时Spring Boot会自动引入8.0.33版本(与3.1.0官方适配),完全兼容MySQL 8.0.x全系列服务器。
手动指定版本方案(如需固定版本)
如果必须手动锁定版本,以下组合经过生产环境验证:
- Spring Boot: 3.1.0
- MySQL Connector/J: 8.0.32 ~ 8.0.35
- MySQL服务器: 8.0.28 ~ 8.0.36
修正后的application.yaml配置
spring: # database configuration datasource: url: jdbc:mysql://mysqldb-service:3306/currency_exchange_db?autoReconnect=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true username: root password: root driverClassName: com.mysql.cj.jdbc.Driver # jpa configuration jpa: show-sql: true generate-ddl: true hibernate: ddl-auto: update database-platform: org.hibernate.dialect.MySQL8Dialect
关键修正点:
- 将
database-platform改为org.hibernate.dialect.MySQL8Dialect(适配MySQL 8.0的新语法与特性) - JDBC URL添加
serverTimezone=UTC(解决MySQL 8.0默认时区不匹配导致的连接失败) - 添加
allowPublicKeyRetrieval=true(避免部分环境下的公钥认证阻塞)
额外排查点
- 确认MySQL服务器的
bind-address设置为0.0.0.0(而非127.0.0.1,否则容器无法访问) - 检查MySQL用户权限:执行
GRANT ALL ON currency_exchange_db.* TO 'root'@'%' IDENTIFIED BY 'root'; FLUSH PRIVILEGES;,确保root允许从任意网段登录 - 验证容器网络连通性:在Spring Boot容器内执行
ping mysqldb-service和telnet mysqldb-service 3306,确认服务端口可达
内容的提问来源于stack exchange,提问作者DevAnuragGarg
相关产品推荐
相关产品推荐

