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,里面跑着容器 jobportaldb,镜像就是 mysql
 
也就是:MySQL 数据库运行在 Docker 容器里面。

二、为什么现在开发都喜欢用 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 就能看到 jobportaldb 容器,和你截图一模一样。
 
然后你 Sqlectron / SpringBoot 直接连接:
 
host: localhost,port:3306,user:root,password:root,database:jobportal

方式 2:docker-compose.yml

新建文件 docker-compose.yml
yaml
 
 
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

  1. Persist Like a Pro - Teaching Docker Containers to Remember Things
默认情况下:如果你删除 MySQL 容器,所有数据库数据全部消失!
 
所以需要 volumes(数据卷)持久化,也就是上面 compose 里的 volumes
 
挂载数据卷后,就算删掉容器,数据保存在电脑磁盘,新建容器依然可以找回数据。

五、你会遇到的常见疑问

  1. Docker MySQL 和本地安装 MySQL 能同时存在吗?
     
    可以,但是端口不能冲突!两者都占用 3306 会报错。
     
    如果你本地已经装了 MySQL,启动 Docker MySQL 时要改成 -p 3307:3306
  2. Sqlectron 怎么连接 Docker 里面的 MySQL?
     
    和连接本地 MySQL 完全一样:localhost:3306,账号 root/root
  3. 什么时候不建议 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

 

 

📖逐行说明关键点

  1. image: mysql:8.0
     
    不要用 latest,锁定版本,防止后续新版本出现兼容问题
  2. container_name: jobportaldb
     
    容器名称唯一,不能和其他容器重名
  3. ports: "3306:3306"
     
    宿主机端口:容器内部端口,外部程序(SpringBoot、Sqlectron)访问 localhost:3306
  4. 环境变量
  • MYSQL_ROOT_PASSWORD:root 账号密码 root
  • MYSQL_DATABASE:容器启动自动创建 jobportal 数据库
  1. volumes: ./jobportal-data:/var/lib/mysql
     
    ✅ 相对路径!Windows、Mac 都能正常识别
     
    作用:数据持久化,删除容器数据不会丢失
  2. 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 特性)

  1. 打开 Docker Desktop,确保正常运行
  2. 如果之前存在旧同名容器,先执行清理(终端运行)
bash
 
 
docker rm -f jobportaldb

 

 
  1. 直接在 IDEA 启动 JobportalApplication
     
    SpringBoot 会自动读取 compose.yml,自动拉取镜像、启动 MySQL 容器,不用手动敲 docker compose up

 

 

posted @ 2026-07-31 13:24  漫漫长路</>  阅读(11)  评论(0)    收藏  举报