01-SpringBoot整合MySQL完整搭建:驱动配置、数据源、连接池一步到位

发布时间:2026/10/21 3:36:16

01-SpringBoot整合MySQL完整搭建:驱动配置、数据源、连接池一步到位 SpringBoot整合MySQL完整搭建驱动配置、数据源、连接池一步到位黒漂技术佬 · 2026年7月前言不管你是在做智慧农业大棚的温湿度采集系统还是在搞无人售货柜的订单后台——数据存在哪里答案是数据库。存文件那是在远古时代才干的蠢事现在谁还敢把订单信息往txt里塞老板第一个飞过来打你。而 Java 生态里最成熟的搭配无非就是SpringBoot MySQL。SpringBoot 帮你搞定配置和工程骨架MySQL 负责踏实存数据中间再搭一座桥——JDBC 驱动和连接池。今天这篇文章咱就从零开始把这座桥搭得明明白白。读完这篇你就能在自己的 SpringBoot 项目里顺畅地读写 MySQL连时区不对“SSL 报错”连接池耗尽这些鬼问题都能自己排查解决。一、SpringBoot 项目骨架先不管别的把 SpringBoot 项目搭起来。你可以用 Spring Initializr 勾选依赖也可以直接手写 pom.xml。我建议新手用 Initializr 走一遍感受一下下一代工程搭建的便利。核心依赖就这三个!-- SpringBoot Web 启动器 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- MySQL 驱动 --dependencygroupIdcom.mysql/groupIdartifactIdmysql-connector-j/artifactIdscoperuntime/scope/dependency!-- MyBatis-Plus 启动器自带 MyBatis --dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.5.5/version/dependency小贴士mysql-connector-j是 MySQL 8.x 的驱动包名如果你还在用 5.x会看到mysql-connector-java那是老古董写法了。scope 设runtime就行编译期不需要它参与。如果不喜欢 MyBatis-Plus只想要原味 MyBatis换成mybatis-spring-boot-starter也可。但后面文章会介绍 MyBatis-Plus 的威力届时代码量能少一半所以咱提前布个局。二、数据源配置让 SpringBoot 认识你的 MySQL认识了谁当然是你的 MySQL 服务。在src/main/resources/application.yml里敲下这几行spring:datasource:url:jdbc:mysql://localhost:3306/smart_retail?useUnicodetruecharacterEncodingutf-8serverTimezoneAsia/Shanghaiusername:rootpassword:your_password_heredriver-class-name:com.mysql.cj.jdbc.Driver逐一解释参数含义容易踩的坑urlJDBC 连接串指定主机、端口、数据库名库名要提前建好别写了smart_retail回头 MySQL 里根本没这个库username/password不多说就是登录凭证生产环境别写明文后面讲配置中心时会展开driver-class-nameJDBC 驱动类全限定名MySQL 8.x 用com.mysql.cj.jdbc.Driver5.x 用com.mysql.jdbc.Driver一个很重要的参数serverTimezone。不写的后果是 Connector/J 抛出The server time zone value Öйú±ê׼ʱ¼ä is unrecognized中文字符在时区协商时翻了车报错信息都成乱码。一律设Asia/Shanghai或GMT%2B8一劳永逸。SSL 怎么办MySQL 8.x 默认开启 SSL而开发环境的数据库大概率没配证书。要么在 url 后面拼useSSLfalse简单粗暴仅限开发环境要么正经配 SSL。生产环境当然选后者但今天我们先把路走通。三、连接池为什么你需要它有人问“我直接每次请求建一个连接用完关掉不行吗”答案是当然不行。TCP 三次握手 MySQL 用户认证 线程创建的开销在高并发下能把你的服务拖死。设想一下无人售货柜每天早上 8 点统一结算100 台柜子同时请求——如果每次都新建连接你的数据库瞬间就会被连接洪流冲垮。连接池的核心思想提前创建一批连接请求来了直接借一个用用完还回去连接的创建和销毁由池子统一管理极大降低开销。四、HikariCPSpringBoot 的默认连接池SpringBoot 2.x 开始默认连接池从 Tomcat JDBC Pool 换成了HikariCP。这名字取自日语光ひかり寓意轻快如光事实也确实如此——它是目前 Java 界最快的连接池benchmark 数据非常能打。你什么都不写SpringBoot 就已经帮你配好了 HikariCP。但如果想精细调参加上这些spring:datasource:hikari:maximum-pool-size:20# 池中最大连接数minimum-idle:5# 池中最小空闲连接数connection-timeout:30000# 等待连接的超时时间(ms)idle-timeout:600000# 空闲连接最大存活时间(ms)max-lifetime:1800000# 连接最大生命周期(ms)connection-test-query:SELECT 1# 连接探活SQL参数解读maximum-pool-size上限默认 10。一台无人售货柜后台大概 20~30 个并发设 20 足够了。真要扛几百并发得综合考虑 CPU 核心数、MySQL 的max_connections等因素。minimum-idle保持几个待命兵默认和maximum-pool-size相同。建议设为 5太低响应慢太高浪费资源。connection-timeout排队等连接的极限时长超时就抛SQLTransientConnectionException。默认 30000ms30秒如果你的接口 SLA 是 3 秒响应这里设 5000 更合适。idle-timeout和max-lifetime强相关的两个参数。max-lifetime应比数据库的wait_timeout短 2~3 分钟避免 MySQL 主动断连接了池子还不知道用的时候发现连接已死。智慧农业场景大棚里几十个传感器每分钟上报一次数据这种闲时长、波峰集中的模式minimum-idle设小一点idle-timeout短一点既省资源又不影响业务。每个传感器上报只是 insert 一条记录拿到连接 10ms 就完事没必要长期占着。五、Druid连接池中的重型坦克阿里开源的 Druid 也不容忽视。它的优势在于自带监控面板SQL 执行统计、耗时分布、连接池状态一目了然内置 SQL 防火墙对 SQL 注入有一定防护能力功能丰富连接泄漏检测、慢 SQL 记录、数据库密码加密等怎么用在 pom.xml 中加入dependencygroupIdcom.alibaba/groupIdartifactIddruid-spring-boot-starter/artifactIdversion1.2.20/version/dependencyapplication.yml配置spring:datasource:type:com.alibaba.druid.pool.DruidDataSourcedruid:initial-size:5min-idle:5max-active:20stat-view-servlet:enabled:trueurl-pattern:/druid/*login-username:adminlogin-password:admin123web-stat-filter:enabled:truefilter:stat:enabled:truelog-slow-sql:trueslow-sql-millis:2000配置完启动项目访问http://localhost:8080/druid/就能看到监控面板。选型建议团队项目、需要运维监控 → Druid追求极致性能、轻量简单 → HikariCP。这俩不存在绝对优劣而是适用场景不同。对于无人售货柜这种 IOT 设备的后台数据表结构不复杂HikariCP 完全够用但如果有专门的 DBA 团队需要关注 SQL 质量Druid 的 SQL 监控面板是刚需。六、连接测试验证依赖和配置搞定之后写个测试类验证一下SpringBootTestclassDatabaseConnectionTest{AutowiredprivateDataSourcedataSource;TestvoidtestConnection()throwsSQLException{try(ConnectionconndataSource.getConnection()){assertNotNull(conn);System.out.println(数据库连接成功);System.out.println(连接池类型dataSource.getClass().getName());}}}跑一下看到控制台打印出HikariPool-1 - Starting...和HikariPool-1 - Start completed.就说明连接池初始化成功了。如果失败排查清单如下错误可能原因解决方案CommunicationsException: Communications link failureMySQL 服务没启动 / 端口错了 / 防火墙挡了netstat -anAccess denied for user用户名或密码错误去 MySQL 里SELECT user,host FROM mysql.user;确认Unknown database数据库名写错了或没建CREATE DATABASE smart_retail DEFAULT CHARACTER SET utf8mb4;Public Key Retrieval is not allowedMySQL 8.x 的 caching_sha2_password 认证问题url 加上allowPublicKeyRetrievaltrue时区报错没有设置 serverTimezoneurl 加上serverTimezoneAsia/Shanghai七、编码设置预防乱码从源头抓起有人写了个无人售货柜的广告管理系统结果货柜上的汉字广告全变成乱码大半夜被客户电话吵醒。血的教训。三层都要统一为utf8mb4支持 emoji 和生僻字spring:datasource:url:jdbc:mysql://localhost:3306/smart_retail?useUnicodetruecharacterEncodingutf-8数据库建库CREATEDATABASEsmart_retailCHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ci;服务端 JVM 参数也建议加-Dfile.encodingUTF-8三层全对齐杜绝乱码。总结至此SpringBoot 与 MySQL 之间的桥梁就搭好了驱动引入 → 数据源配置 → 连接池选择 → 测试验证 → 常见坑排查一条龙搞定。记住几个关键决策点开发环境HikariCP 默认就够参数不用乱调需要监控上 Druid/druid/面板比你自己看日志强十倍encoding 必须统一jdbcUrl、数据库、JVM三处全设UTF-8桥搭好了下一篇我们就用 MyBatis 在这座桥上跑 SQL让数据真正流动起来。
延伸阅读

更多相关文章

2026/10/16 21:29:24

数维杯B题建模本质:问题定义、数据驱动与工程落地

1. 这道题到底在考什么:从“数维杯”B题标题看透建模本质“2024年第九届‘数维杯’大学生数学建模挑战赛B题”——光看这个标题,很多人第一反应是:又一道标准的竞赛题编号,没信息量。但作为连续带过七届校队、亲手改过三百多份B题…

2026/10/14 23:07:17

基于扩展卡尔曼滤波的机会信号导航建模与仿真实现

1. 项目概述:从赛题到实战的完整拆解又到了一年一度的数维杯数学建模挑战赛,今年的A题“源机会信号建模与导航分析”一出来,就在我们几个老建模人的小群里炸开了锅。这题目名字听起来有点唬人,什么“源机会信号”,但说…

2026/10/18 1:10:04

从因子链问题看数论核心:质因数分解与线性筛法应用

1. 项目概述:从一道题看透数论的核心骨架最近在带学生备赛蓝桥杯国赛,刷题时又碰到了“X的因子链”这道经典题目。它几乎每年都会以不同形式出现在各种算法竞赛中,堪称数论部分的“试金石”。很多同学初次接触时,会觉得题目描述有…

2026/10/21 3:36:10

Linux网络编程必知:自定义协议设计与Socket收发踩坑全解

做Linux网络编程绕不开的一个话题就是应用层自定义协议。TCP在你面前铺开的只是一条可靠的字节流通道,字节流本身没有任何语义,两个进程之间要理解彼此,必须自己定一套对话的规则。这套规则,就是你应用层的协议。很多新手习惯直接…

2026/10/21 3:36:10

Docker配置hosts导致服务无法启动的排查与修复指南

1. 从一次凌晨的容器启动失败说起凌晨两点,测试环境的部署流水线突然卡住了。运维同事在群里甩了一张截图:Job for docker.service failed because the control process exited with error code。我第一反应是磁盘满了或者内核参数被改坏了,结…

2026/10/21 3:36:10

Jetson部署7B大模型实战:量化与内存优化全攻略

Jetson设备部署7B级别大语言模型,到底是不是一件“绝对可行”的事?我在Orin系列上折腾了一个多月,可以很负责任地说:可行,而且远没有想象中那么玄乎。只要把系统、内存和量化这三件事处理到位,qwen3.5这一代…

2026/10/21 3:36:10

Docker Compose 一键打包多技能 AI Agent 的实践与踩坑

最近帮一个内部小团队把散落一地的 AI 脚本收编成一套容器化服务,感觉这件事比写业务代码本身还值。团队里原本有做问答的、做知识库检索的、做文档摘要的,各自跑在个人笔记本上,Python 版本不一样、依赖互相冲突、模型 API 密钥散落在每个人…

2026/10/21 3:36:10

Android轻量级FTP服务器实现:纯Java无Root嵌入式文件服务

简介:本资源是一个基于 Apache FtpServer 实现的 Android 端轻量级 FTP 服务器 Demo,面向 Android 应用开发初学者与嵌入式网络服务实践者,解决在移动设备上快速搭建本地文件共享服务的实际需求,适用于局域网内调试、IoT 设备文件…

2026/10/21 3:31:10

基于YOLOv8的智慧工地安全防护装备检测系统实战

做工地安全防护检测这个项目之前,我一直在想一个问题:工地安全事故频发,监控探头装了满工地都是,为什么还是防不住?后来接触了不少智慧工地项目才明白,核心卡点根本不是摄像头不够多,而是海量实…

2026/10/19 18:06:35

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/21 0:00:35

交通流仿真实战:IDM跟驰与MOBIL换道模型参数调优与避坑指南

简介:这份资源是面向交通工程学习者与Python开发者的微观交通流仿真项目,核心实现智能驾驶模型(IDM)下的车辆跟驰与换道行为,可用于理解速度、密度与流量之间的动态关系,适合具备Python基础、希望深入交通模…

2026/10/21 0:00:35

揭穿智能体表面顺从:用追踪代码重建任务执行确定性

1. 表面顺从不是智能体的“礼貌”,而是任务执行链路上的隐性断点最近在调试一个跨平台长周期任务调度系统时,我反复遇到一种令人困惑的现象:智能体在用户指令发出后,几乎秒级响应“已收到”“正在处理”“请稍候”,UI上…

2026/10/21 0:00:35

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事:AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里,按宣传口径,本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”,而是这话背后的含金量——它把过去只能…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑