SpringBoot4 + JPA + MySQL + Docker
application.properties(SpringBoot4 + JPA + MySQL)
直接复制覆盖你的文件,适配图中 jobportal 项目,兼容环境变量 + 本地默认值,修复时区、中文乱码问题
properties
# 项目名称 spring.application.name=jobportal # 控制台彩色日志格式 logging.pattern.console=${CONSOLE_LOG_PATTERN:%green(%d{HH:mm:ss.SSS}) %blue(%-5level) %red([%thread]) %yellow(%logger{36}) %msg%n} # MySQL 数据源配置(支持环境变量覆盖,冒号后为本地默认值) spring.datasource.url=jdbc:mysql://${DATABASE_HOST:localhost}:${DATABASE_PORT:3306}/${DATABASE_NAME:jobportal}?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false spring.datasource.username=${DATABASE_USERNAME:root} spring.datasource.password=${DATABASE_PASSWORD:root} spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # Spring Data JPA / Hibernate 配置 # 是否打印SQL spring.jpa.show-sql=${SHOW_SQL:true} # 格式化SQL输出 spring.jpa.properties.hibernate.format_sql=${HIBERNATE_FORMAT_SQL:true} # hibernate表自动处理 # update:启动不会删除表,自动新增字段(开发推荐) # validate:只校验表结构,不自动建表(生产环境推荐) # create-drop:启动创建,关闭销毁 spring.jpa.hibernate.ddl-auto=update # 数据库方言,适配MySQL8 spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
💡配套 pom.xml 核心依赖(SpringBoot4)
xml
<!-- Spring Data JPA -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- MySQL 驱动 -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
Sqlectron
它是一款轻量、免费开源、跨平台的数据库可视化客户端,作用类似 Navicat、DBeaver、DataGrip。
简单说:用来手动连接数据库、写 SQL、查看表、执行查询。
一、内容
画面是 Docker Desktop,里面跑着容器
也就是:MySQL 数据库运行在 Docker 容器里面。
jobportaldb,镜像就是 mysql
二、为什么现在开发都喜欢用 Docker 运行 MySQL?
1)✅ 环境干净,不污染本机
不用在 Windows/Mac 本地安装 MySQL!
- 不用配置环境变量
- 不用开机自启
- 不想用直接删掉容器,本机不留任何残留
如果你本地装 MySQL,卸载容易残留配置、数据,版本很难切换。
2)✅ 一键切换 MySQL 版本
想测试 MySQL 8.0 / 5.7,只需要换镜像,不用反复安装卸载。
3)✅ 团队统一环境(课程重点)
所有人启动一模一样的数据库:端口、账号、密码、库名完全一致,
不会出现经典问题:“我本地能跑,你电脑跑不起来”。
4)✅ 配合 Spring Boot Compose(你课程后面 80、81 节内容!)
课程后面要讲:Spring Boot Compose
启动 SpringBoot 项目时,自动拉起 MySQL 容器,不用手动打开 Sqlectron、手动启动数据库。
5)✅ 生产环境对齐
线上服务器大量使用 Docker 部署服务,本地开发用 Docker,开发环境 ≈ 线上环境,减少上线踩坑。
⚠️简单总结:本地直接装 MySQL = 重型、难管理Docker MySQL = 轻量化、临时、可抛弃、标准化
三、手把手:Docker 启动 MySQL(适配你的 jobportal 项目)
前提:先安装 Docker Desktop(Windows / Mac)
官网下载:https://www.docker.com/products/docker-desktop/
安装完成打开,确保 Docker 正常运行。
方式 1:命令行创建容器(课程最基础方式)
打开终端(powershell / 终端)复制运行:
bash
docker run --name jobportaldb \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=root \ -e MYSQL_DATABASE=jobportal \ -d mysql:8.0
参数解释:
--name jobportaldb:容器名字(截图里的名称)-p 3306:3306:端口映射,外部程序(SpringBoot、Sqlectron)访问端口MYSQL_ROOT_PASSWORD=root:root 密码MYSQL_DATABASE=jobportal:自动创建 jobportal 数据库!不用手动执行建库 SQL-d后台运行mysql:8.0使用 mysql8 镜像
运行之后:
打开 Docker Desktop 就能看到
然后你 Sqlectron / SpringBoot 直接连接:
host:
jobportaldb 容器,和你截图一模一样。
localhost,port:3306,user:root,password:root,database:jobportal方式 2:docker-compose.yml
新建文件
docker-compose.ymlyaml
services: db: image: mysql:8.0 container_name: jobportaldb ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: jobportal volumes: - mysql-data:/var/lib/mysql volumes: mysql-data:
终端执行启动:
bash
docker compose up -d
好处:配置全部写在文件里,分享给同学直接一键启动。
四、重要:持久化 Persist
- Persist Like a Pro - Teaching Docker Containers to Remember Things
默认情况下:如果你删除 MySQL 容器,所有数据库数据全部消失!
所以需要 volumes(数据卷)持久化,也就是上面 compose 里的
挂载数据卷后,就算删掉容器,数据保存在电脑磁盘,新建容器依然可以找回数据。
volumes。
五、你会遇到的常见疑问
-
Docker MySQL 和本地安装 MySQL 能同时存在吗?可以,但是端口不能冲突!两者都占用 3306 会报错。如果你本地已经装了 MySQL,启动 Docker MySQL 时要改成
-p 3307:3306 -
Sqlectron 怎么连接 Docker 里面的 MySQL?和连接本地 MySQL 完全一样:
localhost:3306,账号 root/root -
什么时候不建议 Docker MySQL?需要长期大量数据、高性能生产库一般不建议;本地学习开发首选 Docker。
--------------------------------------------------------------------------- -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
最终可用完整版 compose.yml(Windows / Mac 通用)
文件名:compose.yml
存放位置:项目根目录,和 pom.xml、application.properties 放在同一层级
yaml
services: dbservice: image: mysql:8.0 container_name: jobportaldb ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: jobportal volumes: - ./jobportal-data:/var/lib/mysql command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
📖逐行说明关键点
image: mysql:8.0不要用latest,锁定版本,防止后续新版本出现兼容问题container_name: jobportaldb容器名称唯一,不能和其他容器重名ports: "3306:3306"宿主机端口:容器内部端口,外部程序(SpringBoot、Sqlectron)访问localhost:3306- 环境变量
- MYSQL_ROOT_PASSWORD:root 账号密码 root
- MYSQL_DATABASE:容器启动自动创建 jobportal 数据库
volumes: ./jobportal-data:/var/lib/mysql✅ 相对路径!Windows、Mac 都能正常识别作用:数据持久化,删除容器数据不会丢失- command:设置 utf8mb4 字符集,解决中文乱码
❌ 必须删掉的错误写法(截图里的 dbservice1 整段删除)
yaml
# 这段直接删掉!作为错误演示,不要保留
dbservice1:
image: mysql:latest
container_name: jobportaldb
冲突原因:同名容器,启动直接报错。
⚙️配套 application.properties 连接配置
properties
spring.datasource.url=jdbc:mysql://localhost:3306/jobportal?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8mb4&useSSL=false spring.datasource.username=root spring.datasource.password=root 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.MySQL8Dialect
🚀启动方式(Spring Boot 4 Compose 特性)
- 打开 Docker Desktop,确保正常运行
- 如果之前存在旧同名容器,先执行清理(终端运行)
bash
docker rm -f jobportaldb
- 直接在 IDEA 启动
JobportalApplicationSpringBoot 会自动读取 compose.yml,自动拉取镜像、启动 MySQL 容器,不用手动敲 docker compose up

浙公网安备 33010602011771号