SpringBoot(二):整合Druid

郎家岭伯爵 2023年07月11日 364次浏览

前言

SpringBoot 整合 Druid 实现。

实现

理论

Druid 是一个高性能的开源数据库连接池,它提供了连接池管理SQL 监控性能调优等功能。它是由阿里巴巴开源的,旨在提供高效可靠的数据库连接管理解决方案。

Druid 连接池具有以下特点和功能:

  1. 高性能:Druid 使用高效的连接池算法和连接复用机制,可以有效地管理和复用数据库连接,提供高性能的数据库访问能力。

  2. 连接池管理:Druid 连接池可以自动管理数据库连接的创建、销毁和复用,通过配置可以灵活控制连接池的大小、连接超时等参数,以满足不同应用的需求。

  3. SQL 监控:Druid 可以监控和统计应用程序执行的 SQL 语句,包括 SQL 执行次数、执行时间、执行错误等信息,可以帮助开发人员分析和优化 SQL 语句的性能。

  4. 连接池扩展:Druid 提供了一些连接池扩展功能,如定制连接验证、定制过滤器等,可以根据业务需求进行自定义扩展。

  5. 性能调优:Druid 连接池内置了一些性能调优的功能,包括连接预热、慢 SQL 日志、缓存预热等,可以帮助优化数据库访问性能。

  6. 可视化监控: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 实现。