SpringBoot 如何使用 Druid 进行数据库连接池管理

使用 Druid 进行数据库连接池管理的 Spring Boot 应用

数据库连接池是任何Web应用程序的重要组成部分,它们有助于管理数据库连接的复用,提高性能和资源利用率。Druid是一个强大的数据库连接池,它具有监控、防SQL注入、快速、可扩展等特点。在本文中,我们将详细介绍如何在Spring Boot应用中使用Druid进行数据库连接池管理,并提供示例代码。

在这里插入图片描述

什么是 Druid?

Druid是阿里巴巴开源的数据库连接池实现,它提供了高性能、强壮、可扩展、可监控的数据库连接池。Druid不仅仅是一个连接池,它还提供了许多数据库监控和管理的功能,如实时监控、SQL防火墙、慢查询日志等。

Druid的一些主要特点包括:

  • 高性能:Druid在连接池和监控方面做了大量优化,以确保最佳的性能。

  • 安全性:Druid提供了SQL防火墙,可以检测和阻止恶意SQL注入攻击。

  • 可扩展性:Druid允许您自定义扩展,以满足特定需求。

  • 监控:Druid提供了丰富的监控数据,可以方便地集成到监控系统中。

创建 Spring Boot 项目

首先,确保您已经安装了Java开发环境和Maven。接下来,您可以使用Spring Initializer创建一个新的Spring Boot项目。在https://start.spring.io/上选择您的项目配置,然后生成项目并下载。

添加 Druid 依赖

在生成的项目中,您需要添加Druid的依赖。在pom.xml文件中,确保以下依赖项已经添加:

<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.6</version>
</dependency>

这将包括Druid所需的所有依赖。

配置 Druid 数据源

接下来,您需要配置Druid数据源。在src/main/resources/application.properties文件中,添加以下配置:

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=your_password
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver# 配置 Druid 数据源
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
spring.datasource.maxWait=60000
spring.datasource.timeBetweenEvictionRunsMillis=60000
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
spring.datasource.filters=stat,wall,log4j2
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

在上述配置中,您需要根据实际情况修改spring.datasource.urlspring.datasource.usernamespring.datasource.password等属性,以便连接到您的数据库。此外,您可以根据需求调整连接池的配置参数。

配置 Druid 监控

Druid提供了内置的监控功能,您可以使用它来监控数据库连接池的使用情况。要启用Druid监控,您需要添加一个Servlet和一个Filter。在src/main/java/com/example/demo包中创建一个名为DruidConfig的配置类:

import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class DruidConfig {@Beanpublic ServletRegistrationBean<StatViewServlet> druidServlet() {ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");// 设置登录用户名和密码registrationBean.addInitParameter("loginUsername", "admin");registrationBean.addInitParameter("loginPassword", "admin");return registrationBean;}@Beanpublic FilterRegistrationBean<WebStatFilter> filter() {FilterRegistrationBean<WebStatFilter> registrationBean = new FilterRegistrationBean<>(new WebStatFilter());// 设置过滤路径registrationBean.addUrlPatterns("/*");// 忽略的资源类型registrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");return registrationBean;}
}

在上述代码中,我们创建了一个DruidConfig配置类,使用ServletRegistrationBean注册了Druid的监控Servlet,以及使用FilterRegistrationBean注册了Druid的监控Filter。您可以根据需要调整登录用户名和密码,以及过滤路径和忽略的资源类型。

创建数据访问类

现在,您可以创建一个数据访问类来测试Druid数据源。在src/main/java/com/example/demo包中创建一个名为DemoDao的类:

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;import java.util.List;
import java.util.Map;@Repository
public class DemoDao {private final JdbcTemplate jdbcTemplate;public DemoDao(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}public List<Map<String, Object>> queryData() {return jdbcTemplate.queryForList("SELECT * FROM my_table");}
}

在上述代码中,我们使用JdbcTemplate来执行SQL查询。

创建测试控制器

接下来,创建一个测试控制器来测试Druid数据源。在src/main/java/com/example/demo包中创建一个名为DemoController的类:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;
import java.util.Map;@RestController
public class DemoController {private final DemoDao demoDao;public DemoController(DemoDao demoDao) {this.demoDao = demoDao;}@GetMapping("/data")public List<Map<String, Object>> getData() {return demoDao.queryData();}
}

在上述代码中,我们创建了一个DemoController,其中有一个端点/data,该端点通过调用DemoDao来查询数据库中的数据。

运行应用程序

现在,您可以运行应用程序了。使用Maven命令:

mvn spring-boot:run

您的Spring Boot应用程序将启动并运行在默认端口(通常是8080)上。

访问 Druid 监控

您可以通过访问http://localhost:8080/druid来访问Druid的监控界面。您可以使用之前在DruidConfig配置类中设置的用户名和密码进行登录。在监控界面上,您可以查看连接池的状态、SQL统计、慢查询日志等信息,以便更好地监控和管理数据库连接池。

测试应用程序

使用浏览器或工具如Postman来测试应用程序。以下是一些示例请求:

  • 获取数据库中的数据:

    • URL: GET http://localhost:8080/data

总结

本文详细介绍了如何在Spring Boot应用程序中使用Druid进行数据库连接池管理。Druid是一个功能强大且高性能的数据库连接池,它提供了丰富的监控和管理功能,有助于提高应用程序的性能和安全性。

以上是使用Druid进行数据库连接池管理的示例。希望这篇文章对您有所帮助,让您更好地了解如何在Spring Boot应用程序中集成和配置Druid数据库连接池。 Happy coding!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/143054.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

谈谈最近招人的感受!

最近折腾新的项目&#xff0c;面试了很多实习生小伙伴&#xff0c;我说说我的一些「面试」感受&#xff0c; 虽然是一个老生常谈的话题&#xff0c;但是依然提一下。 准时很重要&#xff1a;提前一点时间&#xff0c;踩个点&#xff0c;别迟到&#xff0c;面试的过程中由于每个…

低功耗引擎Cliptrix为什么可以成为IOT的高效能工具

在万物互联的时代&#xff0c;现代人已普遍接受电视、音箱等电器设备具备智能化能力&#xff0c;也是在这个趋势下&#xff0c;我们身边越来越多的iOT设备联网和交互成为刚需。 但iot设备也面临到一些非常显著的痛点&#xff0c;例如iot设备的内存、处理器等核心元件无法与手机…

爬虫 — 多线程

目录 一、多任务概念二、实现多任务方式1、多进程 &#xff08;Multiprocessing&#xff09;2、多线程&#xff08;Multithreading&#xff09;3、协程&#xff08;Coroutine&#xff09; 三、多线程执行顺序四、多线程的方法1、join()2、setDaemon()3、threading.enumerate() …

python运算函数

简 python输入输出函数input() :用户用于读取键盘输入的函数&#xff0c;返回值为“string”类型 运算函数abs(x) &#xff1a;x的绝对值int(x) &#xff1a;将x转换成整型(截掉小数部分)float(x):浮点数divmod(x,y):返回&#xff08;x//y,x%y&#xff09;complex(re,im):返回一…

linux部署页面内容

/bin&#xff1a;该目录包含了常用的二进制可执行文件&#xff0c;如ls、cp、mv、rm等等。 /boot&#xff1a;该目录包含了启动Linux系统所需的文件&#xff0c;如内核文件和引导加载程序。 /dev&#xff1a;该目录包含了所有设备文件&#xff0c;如硬盘、光驱、鼠标、键盘等等…

Scoket网络编程

1.首先来的个简单示例: 客户端&#xff1a; using System; using System.Net.Sockets; using System.Net; using System.Text;namespace Client {internal class Program{static void Main(string[] args){Console.WriteLine("Client");// 创建一个Socket并连接到服…

windows11 cmd使用python没有反应, windows11使用python跳应用商店

1. 修改系统变量位置&#xff0c;右击我的电脑&#xff0c;选择属性&#xff1a; 点击环境变量&#xff0c;找到path&#xff1a; 将python 的path移到windowsapp 上侧 保存退出。重新打开cmd&#xff0c;输入命令python -v

网络通信(套接字通信)(C/C++)

1.网络编程必知概念 1.广域网和局域网 广域网:又称外网、公网。是连接不同地区局域网或城域网进行计算机通信的远程公共网络。 局域网:在一定的通信范围内,有很个多计算机组成的私有网络就叫局域网。(这些计算机相互之间是可以通信的,但是不能直接访问外网(可以通过网线…

虹科方案 | LIN/CAN总线汽车零部件测试方案

文章目录 摘要一、汽车零部件测试的重要性&#xff1f;二、虹科的测试仿真工具如何在汽车零部件测试展露头角&#xff1f;三、应用场景**应用场景1&#xff1a;方向盘开关的功能测试****应用场景2&#xff1a;各类型电机的控制测试****应用场景3&#xff1a;RGB氛围灯的功能测试…

CISSP,你值得拥有(我的学习之路)

&#xff08;只分享三点&#xff1a;怎么学、怎么练、怎么考。&#xff09; 我为啥去考CISSP 我是个在信安行业摸爬滚打将近20年的老油条&#xff0c;知道CISSP这个认证是很早前的事情了&#xff0c;但一直以来都觉得它有点难&#xff0c;加上人又懒得要命&#xff0c;也就始…

安装elasticsearch

1.部署单点es 1.1.创建网络 因为我们还需要部署kibana容器,因此需要让es和kibana容器互联。这里先创建一个网络: docker network create es-net 1.2.加载镜像 这里我们采用elasticsearch的7.12.1版本的镜像,这个镜像体积非常大,接近1G。不建议大家自己pull。 课前资料提…

用selenium和xpath定位元素并获取属性值以及str字符型转json型

页面html如图所示&#xff1a; 要使用xpath定位这个div元素&#xff0c;并且获取其属性data-config的内容值。 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.options import Optionshost127.0.0.1 port10808 …

Serlet API详解

目录 一、HttpServlet 1.1 处理doGet请求 1.2 处理doPost请求 二、HttpServletRequest 2.1 核心方法 三、HttpServletRespons 3.1 核心方法 一、HttpServlet 在编写Servlet代码的时候&#xff0c;首先第一步要做的就是继承HttpServlet类&#xff0c;并重写其中的某些方法 核心…

最新ChatGPT网站系统源码+支持GPT4.0+支持AI绘画Midjourney绘画+支持国内全AI模型

一、SparkAI创作系统 SparkAi系统是基于很火的GPT提问进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT系统&#xff1f;小编这里写一个详细图文教程吧&a…

前端知识总结

在前端开发中&#xff0c;y x是一种常见的自增运算符的使用方式。它表示将变量x的值自增1&#xff0c;并将自增后的值赋给变量y。 具体来说&#xff0c;x是一种后缀自增运算符&#xff0c;表示将变量x的值自增1。而y x则是将自增前的值赋给变量y。这意味着在执行y x之后&am…

文件夹无法删除怎么办?4种实用方法,轻松解决

在日常使用电脑时&#xff0c;有时候会碰到无法删除文件夹的情况&#xff0c;这可能会带来一些困扰。如果你想删除一个文件夹却发现无法删除&#xff0c;不必担心&#xff0c;其实是有解决方法的。下面一起来了解下文件夹不能删除的原因以及解决方法吧。 文件夹为什么不能删除…

编程每日一练(多语言实现):判断偶数

文章目录 一、实例描述二、技术要点三、代码实现3.1 C 语言实现3.2 Python 语言实现3.3 Java 语言实现 一、实例描述 利用单条件单分支选择语句判断输入的一个整数 是否是偶数。 运行程序&#xff0c;输入一个 整数18&#xff0c; 然后按回车键&#xff0c;将提示该数字是偶数…

深入理解React中fiber

一、前言 Fiber是对React核心算法的重写&#xff0c;Fiber是React内部定义的一种数据结构&#xff0c;将更新渲染耗时长的大任务&#xff0c;分为许多的小片。Fiber节点保存啦组件需要更新的状态和副作用&#xff0c;一个Fiber代表一个工作单元。 二、Fiber在React做了什么 …

【文末送书】用Chat GPT轻松玩转机器学习与深度学习

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

华南理工大学电子与信息学院23年预推免复试面试经验贴

运气较好&#xff0c;复试分数90.24&#xff0c;电科学硕分数线84、信通83、专硕电子与信息74. 面试流程&#xff1a; 1&#xff1a;5min ppt的介绍。其中前2min用英语简要介绍基本信息&#xff0c;后3min可用英语也可用中文 介绍具体项目信息如大创、科研、竞赛等&#xff08…