【Uni-App+SSM 宠物实战】Day3:Druid 连接池配置

120 阅读6分钟

一、前言

昨天我们完成了 SSM+MyBatis-Plus 后端框架的初始化,今天聚焦数据库交互的 “性能优化核心”——Druid 连接池配置

Druid 是阿里巴巴开源的数据库连接池,相比 SSM 默认的连接池(如 DBCP),它不仅能实现 “连接复用”(避免每次查询都新建数据库连接,减少资源消耗),还自带 SQL 监控、慢查询统计 等实用功能,能帮我们实时排查宠物数据查询、订单提交等业务的性能问题。

今天我们会通过修改 Spring 配置文件,将默认连接池替换为 Druid,并测试监控页面是否能正常查看 SQL 执行情况,为后续高频业务(如宠物列表分页、商家服务查询)打下高效基础。

二、今日教学目标

  1. 理解 Druid 连接池的核心作用(连接复用 + 监控),能区分它与默认连接池的差异;
  1. 掌握在 SSM 项目中配置 Druid 的关键步骤(修改 spring-mybatis.xml、关联配置文件);
  1. 成功访问 Druid 监控页面,能通过监控查看 SQL 执行记录。

三、前置准备

  1. 已完成 Day2 内容:后端项目能正常启动,UserDao 的 selectById() 方法可正常查询数据;
  1. 简单理解 “连接池” 概念:把数据库连接比作 “水池里的水”,连接池提前创建好一批连接,业务需要时直接 “取水”,用完后 “还回水池”,避免反复 “烧水(新建连接)” 的耗时;
  1. 项目关键文件路径参考:
    • Spring 配置文件:C:\Users\Downloads\my-pet-custom\mypet\src\main\resources\spring\spring-mybatis.xml
    • 数据库配置文件:src/main/resources/config.properties

四、代码实现(核心步骤)

1. 第一步:确认 Druid 依赖(已在 pom.xml 中配置)

首先检查项目是否已引入 Druid 依赖,打开 pom.xml 文件,确认存在以下配置(项目默认已配置,无需手动添加):

<!-- Druid 连接池依赖 -->
<properties>
    <druid.version>1.1.0</druid.version> <!-- 项目适配的 Druid 版本 -->
</properties>
<dependencies>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>${druid.version}</version>
    </dependency>
</dependencies>

说明:若依赖缺失,右键 pom.xml → MavenReload Project,IDEA 会自动下载。

2. 第二步:修改 spring-mybatis.xml,配置 Druid 数据源

打开 spring-mybatis.xml(路径见前置准备),找到 “数据源配置” 部分,将默认的 DataSource 替换为 Druid 数据源,核心代码如下:

(1)配置 Druid 数据源(替换默认连接池)

<!-- 原有默认数据源(可注释或删除) -->
<!-- <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">...</bean> -->
<!-- 新配置:Druid 数据源 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
    <!-- 1. 数据库驱动类(从 config.properties 读取配置,避免硬编码) -->
    <property name="driverClassName" value="${jdbc.driver}" />
    <!-- 2. 数据库连接 URL(格式:jdbc:mysql://IP:端口/数据库名?参数) -->
    <property name="url" value="${jdbc.url}" />
    <!-- 3. 数据库用户名 -->
    <property name="username" value="${jdbc.username}" />
    <!-- 4. 数据库密码 -->
    <property name="password" value="${jdbc.password}" />
    
    <!-- 可选:Druid 性能优化配置(按需添加) -->
    <property name="initialSize" value="5" /> <!-- 初始化连接数 -->
    <property name="minIdle" value="5" />     <!-- 最小空闲连接数 -->
    <property name="maxActive" value="20" />  <!-- 最大活跃连接数 -->
    <property name="maxWait" value="60000" /> <!-- 获取连接的最大等待时间(毫秒) -->
</bean>

(2)关联 config.properties 配置文件

Druid 数据源中的 jdbc.driver{jdbc.driver}、{jdbc.url} 等变量,需要在 config.properties 中定义,打开该文件(路径:src/main/resources/config.properties),确认配置正确:

# 数据库驱动(MySQL 8 需用 com.mysql.cj.jdbc.Driver,MySQL 5 用 com.mysql.jdbc.Driver)
jdbc.driver=com.mysql.jdbc.Driver
# 数据库连接 URL(mypet 是项目数据库名,需与 Day1 初始化的数据库名一致)
jdbc.url=jdbc:mysql://localhost:3306/mypet?useUnicode=true&characterEncoding=utf8&useSSL=false
# 数据库用户名(默认 root)
jdbc.username=root
# 数据库密码(Day1 安装 MySQL 时设置的密码,如 123456)
jdbc.password=123456

关键提醒:若使用 MySQL 8 版本,需修改 jdbc.driver 为 com.mysql.cj.jdbc.Driver,并在 URL 后加 &serverTimezone=UTC(解决时区问题),例如:

jdbc.url=jdbc:mysql://localhost:3306/mypet?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC

3. 第三步:配置 Druid 监控插件(StatFilter)

在 spring-mybatis.xml 中继续添加 Druid 监控插件,用于收集 SQL 执行数据,代码如下:

<!-- Druid 监控拦截器:收集 SQL 执行信息 -->
<bean id="druidStatInterceptor" class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor">
    <!-- 可选:配置过滤规则(默认监控所有 SQL) -->
    <property name="filters" value="stat" /> <!-- "stat" 表示开启 SQL 统计监控 -->
</bean>
<!-- 配置监控切面:指定哪些 Bean 需要被监控(这里监控所有 Service 层 Bean) -->
<bean id="druidStatAspect" class="com.alibaba.druid.support.spring.stat.DruidStatAspect">
    <property name="statInterceptor" ref="druidStatInterceptor" />
    <!-- 切面表达式:监控 com.service 包下所有类的所有方法 -->
    <property name="pointcut" value="execution(* com.service.*.*(..))" />
</bean>

说明:pointcut 表达式可根据需求调整,比如只监控宠物相关 Service(execution(* com.service.ChongwuxinxiService.*(..)))。

五、效果验证(核心:测试 Druid 监控页面)

1. 重启后端项目

  1. 在 IDEA 中停止当前运行的项目(点击红色方形按钮);
  1. 重新点击 “启动” 按钮(绿色三角),等待项目启动(控制台无报错即成功)。

2. 访问 Druid 监控页面

打开浏览器,输入监控页面 URL:

http://localhost:8080/mypet/druid/index.html

(1)登录监控页面(若有登录配置)

若项目配置了 Druid 登录验证(默认无,如需添加可自行配置),输入用户名密码即可;若无配置,直接进入监控首页,显示如下核心菜单:

  • 数据源:查看 Druid 连接池的配置(如初始化连接数、活跃连接数);
  • SQL 监控:查看所有执行过的 SQL 语句、执行次数、耗时统计;
  • 慢查询日志:查看执行时间超过阈值的 SQL(默认 3000 毫秒)。

3. 测试 SQL 监控功能

我们通过执行 UserDao 的 selectList() 方法,验证监控是否生效:

  1. 打开 Day2 编写的 MpTest.java 测试类;
  1. 新增 testSelectList() 方法,查询所有用户:
@Test
public void testSelectList() {
    // 调用 MP 自带的 selectList(),查询所有用户(参数 null 表示无过滤条件)
    List<UserEntity> userList = userDao.selectList(null);
    System.out.println("所有用户数量:" + userList.size());
}
  1. 运行该方法,控制台输出 “所有用户数量:X”(X 为数据库中用户总数);
  1. 刷新 Druid 监控页面 → 点击 “SQL 监控” 菜单,能看到类似以下记录,说明监控生效:
SQL 语句执行次数总耗时(毫秒)平均耗时(毫秒)
SELECT * FROM users15050

六、常见问题与解决方案

问题描述可能原因解决方案
启动项目时,控制台报 “Failed to load driver class com.mysql.jdbc.Driver”1. MySQL 驱动依赖缺失;2. 驱动类名与 MySQL 版本不匹配1. 检查 pom.xml 是否有 MySQL 依赖(mysql-connector-java);2. MySQL 8 改用 com.mysql.cj.jdbc.Driver
访问监控页面报 “404 Not Found”1. Druid 依赖未下载成功;2. 项目访问路径错误(如端口不是 8080)1. 右键 pom.xml → Maven → Reload Project;2. 确认 URL 中的端口(8080)与 IDEA 启动日志中的端口一致(查看控制台 “Tomcat started on port (s): XXXX”)
监控页面 “SQL 监控” 为空,无任何记录1. Druid 监控插件(StatFilter)未配置;2. 未执行任何 SQL 方法1. 检查 spring-mybatis.xml 中是否配置了 druidStatInterceptor 和 druidStatAspect;2. 重新运行 testSelectList() 方法,执行 SQL 后刷新监控页
连接数据库报 “Access denied for user 'root'@'localhost' (using password: YES)”数据库用户名或密码错误1. 检查 config.properties 中 jdbc.username(默认 root)和 jdbc.password 是否正确;2. 用 MySQL 命令行(mysql -uroot -p)验证密码是否能登录

七、工具类 / 框架特性拓展

Druid 对比其他连接池:核心优势在哪里?

连接池类型核心特点适用场景
Druid(阿里)1. 自带 SQL 监控、慢查询统计;2. 支持防 SQL 注入;3. 可配置化程度高中大型项目(如本宠物平台,需监控高频查询(宠物列表、订单)的性能)
HikariCP(Spring Boot 默认)1. 性能极致(启动快、内存占用低);2. 配置简单轻量级项目(无需复杂监控,追求速度)
DBCP(SSM 默认)1. 稳定但功能单一;2. 无监控能力小型 Demo 项目(不推荐生产环境)

本项目后续开发 “宠物信息分页查询”“商家服务预约统计” 等高频功能时,我们会通过 Druid 监控页面排查 “慢 SQL”(如未加索引导致查询耗时过长),优化用户体验。

八、结语

今天的核心是 Druid 连接池配置和监控验证 —— 你的 Druid 监控页面能正常显示 SQL 记录吗?

如果遇到 “监控页空白”“连接数据库失败” 等问题,欢迎在评论区分享你的 config.properties 关键配置(注意打码密码)或控制台错误日志,我们一起排查;如果成功看到 SQL 监控记录,也可以晒出你的 “SQL 执行耗时”,看看谁的配置更高效!

小马绿泡泡:Niuma4G

需要源码的同学可私小马~

下期预告

Day4:Uni-App 前端初始化(创建跨端项目、配置底部 TabBar(首页 / 宠物 / 商家 / 我的)、实现第一个页面布局,开启前端开发流程)。