前言
SpringBoot 整合 Druid
实现。
实现
理论
Druid
是一个高性能的开源数据库连接池,它提供了连接池管理、SQL 监控、性能调优等功能。它是由阿里巴巴开源的,旨在提供高效可靠的数据库连接管理解决方案。
Druid
连接池具有以下特点和功能:
-
高性能:Druid 使用高效的连接池算法和连接复用机制,可以有效地管理和复用数据库连接,提供高性能的数据库访问能力。
-
连接池管理:Druid 连接池可以自动管理数据库连接的创建、销毁和复用,通过配置可以灵活控制连接池的大小、连接超时等参数,以满足不同应用的需求。
-
SQL 监控:Druid 可以监控和统计应用程序执行的 SQL 语句,包括 SQL 执行次数、执行时间、执行错误等信息,可以帮助开发人员分析和优化 SQL 语句的性能。
-
连接池扩展:Druid 提供了一些连接池扩展功能,如定制连接验证、定制过滤器等,可以根据业务需求进行自定义扩展。
-
性能调优:Druid 连接池内置了一些性能调优的功能,包括连接预热、慢 SQL 日志、缓存预热等,可以帮助优化数据库访问性能。
-
可视化监控:Druid 提供了可视化的监控界面,可以实时查看连接池的状态、SQL 执行情况、连接活跃度等信息,方便开发人员进行监控和调优。
Druid 连接池在许多 Java 应用程序中广泛使用,特别是在使用 Spring Boot 和 Spring 框架的项目中。它可以有效地管理数据库连接,提供高性能的数据库访问能力,并通过 SQL 监控和性能调优功能帮助开发人员优化应用程序的数据库操作。
SpringBoot
新建一个 SpringBoot 项目。
pom.xml
在 pom.xml
文件中添加如下依赖:
<!-- Spring Boot Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Druid Starter -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
application.properties
在 application.properties
中添加如下配置:
# 数据库连接配置
spring.datasource.url=jdbc:mysql://localhost:3306/db_name?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
spring.datasource.username=db_username
spring.datasource.password=db_password
# Druid配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.filters=stat,wall
spring.datasource.maxActive=20
spring.datasource.initialSize=1
spring.datasource.maxWait=60000
spring.datasource.minIdle=1
spring.datasource.timeBetweenEvictionRunsMillis=60000
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
spring.datasource.poolPreparedStatements=true
spring.datasource.maxOpenPreparedStatements=20
# Druid监控配置
spring.datasource.druid.stat-view-servlet.enabled=true
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
spring.datasource.druid.web-stat-filter.enabled=true
spring.datasource.druid.web-stat-filter.url-pattern=/*
测试controller
我们使用一个 controller 来进行测试:
package com.langjialing.druiddemo.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* @author 郎家岭伯爵
* @time 2023/7/11 15:13
*/
@RestController
public class TestController {
@Autowired
private JdbcTemplate jdbcTemplate;
@GetMapping("/test")
public String test(@RequestParam Integer id){
String sql = "select user_name from user where user_id = " + id;
String result = jdbcTemplate.queryForObject(sql, String.class);
return result;
}
}
Druid 监控页面(访问地址 http://localhost:8080/druid
):
总结
SpringBoot 整合 Druid
实现。