SpringBoot(二):整合Druid

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

前言

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 文件中添加如下依赖:

  1. <!-- Spring Boot Starter -->
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-web</artifactId>
  5. </dependency>

  6. <!-- Druid Starter -->
  7. <dependency>
  8. <groupId>com.alibaba</groupId>
  9. <artifactId>druid-spring-boot-starter</artifactId>
  10. <version>1.2.6</version>
  11. </dependency>

  12. <dependency>
  13. <groupId>mysql</groupId>
  14. <artifactId>mysql-connector-java</artifactId>
  15. <version>8.0.11</version>
  16. </dependency>
  17. <dependency>
  18. <groupId>org.springframework.boot</groupId>
  19. <artifactId>spring-boot-starter-jdbc</artifactId>
  20. <version>RELEASE</version>
  21. <scope>compile</scope>
  22. </dependency>

application.properties

application.properties 中添加如下配置:

  1. # 数据库连接配置
  2. spring.datasource.url=jdbc:mysql://localhost:3306/db_name?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
  3. spring.datasource.username=db_username
  4. spring.datasource.password=db_password

  5. # Druid配置
  6. spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
  7. spring.datasource.driver-class-name=com.mysql.jdbc.Driver
  8. spring.datasource.filters=stat,wall
  9. spring.datasource.maxActive=20
  10. spring.datasource.initialSize=1
  11. spring.datasource.maxWait=60000
  12. spring.datasource.minIdle=1
  13. spring.datasource.timeBetweenEvictionRunsMillis=60000
  14. spring.datasource.minEvictableIdleTimeMillis=300000
  15. spring.datasource.validationQuery=SELECT 1
  16. spring.datasource.testWhileIdle=true
  17. spring.datasource.testOnBorrow=false
  18. spring.datasource.testOnReturn=false
  19. spring.datasource.poolPreparedStatements=true
  20. spring.datasource.maxOpenPreparedStatements=20

  21. # Druid监控配置
  22. spring.datasource.druid.stat-view-servlet.enabled=true
  23. spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
  24. spring.datasource.druid.web-stat-filter.enabled=true
  25. spring.datasource.druid.web-stat-filter.url-pattern=/*

测试controller

我们使用一个 controller 来进行测试:

  1. package com.langjialing.druiddemo.controller;

  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.jdbc.core.JdbcTemplate;
  4. import org.springframework.web.bind.annotation.GetMapping;
  5. import org.springframework.web.bind.annotation.RequestParam;
  6. import org.springframework.web.bind.annotation.RestController;

  7. /**
  8. * @author 郎家岭伯爵
  9. * @time 2023/7/11 15:13
  10. */
  11. @RestController
  12. public class TestController {

  13. @Autowired
  14. private JdbcTemplate jdbcTemplate;

  15. @GetMapping("/test")
  16. public String test(@RequestParam Integer id){
  17. String sql = "select user_name from user where user_id = " + id;
  18. String result = jdbcTemplate.queryForObject(sql, String.class);
  19. return result;
  20. }
  21. }

Druid 监控页面(访问地址 http://localhost:8080/druid):

总结

SpringBoot 整合 Druid 实现。