一、介绍
1.1 技术介绍
Druid是一个高效、功能强大、可扩展性好的数据库连接池,它内置了一个功能强大的StatFilter插件,可以通过网页对数据库访问进行监控,同时引用方便,只需要在项目中添加相关依赖即可使用
1.2 项目地址
GitHub地址:
https://github.com/alibaba/druid/
1.3 软件版本
- Spring Boot版本:2.3.2.RELEASE
- Druid版本:1.1.10
二、环境搭建
创建一个Spring Boot项目,将Druid数据库连接池作为一个jar包引入到pom文件中
2.1 配置
2.1.1 配置pom文件
在pom文件中引入jar包(已将所有版本信息放入properties中,可根据项目需要进行更改)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>cn.toj</groupId>
<artifactId>druiddemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>druiddemo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<druid-spring-boot-starter.version>1.1.10</druid-spring-boot-starter.version>
<mybatis.version>3.5.5</mybatis.version>
<mybatis-spring-boot-starter.version>2.1.3</mybatis-spring-boot-starter.version>
<mysql-connector-java.version>5.1.46</mysql-connector-java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Druid数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid-spring-boot-starter.version}</version>
</dependency>
<!-- MyBatis框架 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis-spring-boot-starter.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- MySQL数据库连接工具 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector-java.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.1.2 配置properties文件
因为Druid连接池是被引入的jar包,所以需要在properties文件中进行配置,由于配置较长且很重要,所以分为两部分
- 第一部分:配置端口、数据库连接及MyBatis信息
#端口
server.port=9005
#配置数据库连接信息
# 将默认的HikariCP连接池替换为Druid(※ 重要,需要提前引入jar包)
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/user?characterEncoding=utf-8&useSSL=false
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root
# mybatis配置
mybatis.type-aliases-package=cn.toj.druiddemo.domain
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.configuration.map-underscore-to-camel-case=true
其中以下部分极为重要,Spring Boot默认连接池为HikariCP连接池,该连接池性能也十分好,但是没有Druid连接池的监控功能,添加该句可以将默认连接池替换为Druid连接池
# 将默认的HikariCP连接池替换为Druid(※ 重要,需要提前引入jar包)
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
- 第二部分:Druid配置及监控页配置
# Druid配置
# 初始化连接池个数
spring.datasource.druid.initial-size=5
# 最大连接池个数
spring.datasource.druid.max-active=20
# 最小连接池数
spring.datasource.druid.min-idle=15
# 最长等待时间
spring.datasource.druid.max-wait=60000
#监控页配置(使用监控功能必须配置)
# 启用StatFilter
spring.datasource.druid.web-stat-filter.enabled= true
# 添加过滤规则
spring.datasource.druid.web-stat-filter.url-pattern=/*
# 忽略过滤的格式
spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*
# 访问路径为/druid时,跳转到StatViewServlet
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
# 是否能够重置数据
spring.datasource.druid.stat-view-servlet.reset-enable=false
# 需要账号密码才能访问控制台,默认为root
spring.datasource.druid.stat-view-servlet.login-username=admin
spring.datasource.druid.stat-view-servlet.login-password=123456
# IP白名单
spring.datasource.druid.stat-view-servlet.allow=127.0.0.1
其中Druid主要设置初始,最大,最小,最长等待时间等参数,可根据项目需求进行设置;StatFilter默认关闭,使用spring.datasource.druid.web-stat-filter.enabled= true
启动,并使用其他参数实现账号密码的设置、白名单、是否能重置数据库等功能
2.2 整体架构
三、Demo开发演示
3.1 Demo概述
本项目的Demo主要对400ToJava:118-EhCache进程内缓存框架介绍的Demo进行修改,删除了有关EhCache相关的部分,全部使用数据库进行数据的查询及存储,以下只简要介绍服务层和启动类这两个改动相对较大的类
3.1.1 服务层Service类
去掉验证数据来源的输出
package cn.toj.druiddemo.service;
import cn.toj.druiddemo.domain.User;
import cn.toj.druiddemo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public int addUser( User user ) {
return userMapper.addUser(user);
}
public List<User> getUsersByName(String userName ) {
List<User> users = userMapper.getUsersByName( userName );
return users;
}
}
3.1.2 启动类
删除缓存相关的注解@EnableCaching
package cn.toj.druiddemo;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("cn.toj.druiddemo")
public class DruiddemoApplication {
public static void main(String[] args) {
SpringApplication.run(DruiddemoApplication.class, args);
}
}
3.2 监控页
作为Druid的特色功能,监控页可以手机sql语句的执行情况,包括次数、时间、并发量等功能,部署到生产环境时,可根据每个sql的执行信息了解执行情况
3.2.1 登录监控页
登录地址为${你的项目ip地址}:${你的项目设置的端口}/druid
,本Demo的登录地址为http://localhost:9005/druid,因为在properties文件中设置了账号密码,所以默认跳转到登录页面
输入预设的账号密码,登录到监控页面,首页Druid版本,驱动,Java版本,依赖包的位置等信息
数据源页记录连接的数据信息及Druid连接池的配置,包括最大连结数等在properties文件中配置的信息
SQL监控页面为重点页面,该页面记录了包括增删改查等所有对数据库进行查询及修改的所有动作,并记录每个动作执行次数,对数据库的读取或修改的次数,以及最大并发数,程序的维护者可根据这些信息对程序进行维护
点击进入每个sql语句还可查看该语句的执行详细信息
3.3 Demo下载地址
- GitHub项目地址:
https://github.com/diyzhang/42j119-druiddemo
- 使用Git下载项目的命令:
git clone https://github.com/diyzhang/42j119-druiddemo.git