Unable to open JDBC Connection for DDL execution
Error creating bean with name 'entityManagerFactory'
- MySQL 服务未启动
- 数据库不存在
- 用户名/密码错误
- 端口号错误
- 网络连接问题
Windows:
# 方式1: 检查服务
services.msc
# 查找 MySQL 服务,确保状态为"正在运行"
# 方式2: 使用命令行
net start | findstr MySQLLinux/Mac:
# 检查 MySQL 服务状态
sudo systemctl status mysql
# 或
sudo service mysql status如果服务未启动,启动它:
# Windows
net start MySQL
# Linux/Mac
sudo systemctl start mysql
# 或
sudo service mysql start# 尝试连接 MySQL
mysql -u root -p如果无法连接,说明 MySQL 服务有问题。
-- 登录 MySQL 后执行
SHOW DATABASES LIKE 'markglow';如果数据库不存在,创建它:
CREATE DATABASE IF NOT EXISTS markglow
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;在 application.yml 中确认:
spring:
datasource:
username: root # 你的 MySQL 用户名
password: # 你的 MySQL 密码(如果有密码,必须填写)重要: 如果 MySQL root 用户有密码,必须在配置文件中填写!
默认 MySQL 端口是 3306。如果使用其他端口,修改 URL:
url: jdbc:mysql://localhost:你的端口号/markglow?...可以使用以下 Java 代码测试连接,或使用数据库工具(如 MySQL Workbench、Navicat)测试连接。
如果暂时无法解决 MySQL 连接问题,可以临时使用 H2 数据库:
- 取消注释 H2 依赖(在
pom.xml中):
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>- 修改
application.yml:
spring:
datasource:
url: jdbc:h2:mem:markglowdb
driver-class-name: org.h2.Driver
username: sa
password:
h2:
console:
enabled: true
path: /h2-console
jpa:
hibernate:
ddl-auto: update
properties:
hibernate:
dialect: org.hibernate.dialect.H2Dialect- 注释掉 MySQL 依赖(在
pom.xml中):
<!-- MySQL 驱动 -->
<!--
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
<scope>runtime</scope>
</dependency>
-->注意: H2 是内存数据库,重启后数据会丢失。
CREATE DATABASE IF NOT EXISTS markglow
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;编辑 backend/src/main/resources/application.yml:
spring:
datasource:
url: jdbc:mysql://localhost:3306/markglow?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
driver-class-name: com.mysql.cj.jdbc.Driver
username: root # 修改为你的 MySQL 用户名
password: your_password # 修改为你的 MySQL 密码(如果有)使用 MySQL 客户端工具测试连接:
- 主机:
localhost - 端口:
3306 - 用户名:
root(或你配置的用户名) - 密码: 你配置的密码
- 数据库:
markglow
为了避免在配置文件中暴露密码,可以使用环境变量:
- 修改
application.yml:
spring:
datasource:
url: jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:markglow}?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: ${DB_USER:root}
password: ${DB_PASSWORD:}- 设置环境变量:
Windows (PowerShell):
$env:DB_HOST="localhost"
$env:DB_PORT="3306"
$env:DB_NAME="markglow"
$env:DB_USER="root"
$env:DB_PASSWORD="your_password"Windows (CMD):
set DB_HOST=localhost
set DB_PORT=3306
set DB_NAME=markglow
set DB_USER=root
set DB_PASSWORD=your_passwordLinux/Mac:
export DB_HOST=localhost
export DB_PORT=3306
export DB_NAME=markglow
export DB_USER=root
export DB_PASSWORD=your_password原因: MySQL 服务未启动或无法连接
解决:
- 启动 MySQL 服务
- 检查防火墙设置
- 检查 MySQL 是否监听在 3306 端口
原因: 用户名或密码错误
解决:
- 检查
application.yml中的用户名和密码 - 使用 MySQL 客户端测试连接
- 如果忘记密码,重置 MySQL root 密码
原因: 数据库不存在
解决:
CREATE DATABASE markglow CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;原因: 时区配置问题
解决: 确保连接 URL 中包含 serverTimezone=Asia/Shanghai
原因: MySQL 8.0 的安全限制
解决: 确保连接 URL 中包含 allowPublicKeyRetrieval=true
启动应用后,查看日志应该看到类似信息:
Hibernate: create table documents ...
如果看到表创建的 SQL 语句,说明连接成功。
如果以上方法都无法解决问题,请提供:
- 完整的错误日志
- MySQL 版本信息:
mysql --version - 操作系统信息
application.yml配置(隐藏敏感信息)