Druid 连接池

Alibaba Druid简单介绍及使用 Alibaba Druid(以下简称 Druid)是阿里巴巴开源的数据库连接池、SQL 解析、监控和扩展功能的工具集合。它不仅仅是一个数据库连接池,还提供了强大的监控和管理功能,可以帮助开发者更好地管理数据库连接、优化SQL查询以及监控数据库性能。 阅读详情
AI摘要

本文介绍了Druid数据库连接池在Java1.8及SpringBoot2.3中的配置方法,包括基本参数设定、使用示例以及在SpringBoot中的集成,重点强调了监控功能的配置和性能影响。

Druid 连接池是阿里巴巴开源的数据库连接池项目,Druid 为监控而生,内置强大的监控功能,监控特性不影响性能,官网地址为:https://github.com/alibaba/druid/wiki/Druid%E8%BF%9E%E6%8E%A5%E6%B1%A0%E4%BB%8B%E7%BB%8D;本文主要介绍 Druid 的基本使用,文中使用到的软件版本:Java 1.8.0_191、Druid 1.2.8、Spring Boot 2.3.12.RELEASE。

1、配置参数

Druid 连接池的配置参数兼容 DBCP,个别配置的语意有所区别。

配置缺省值说明
name配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来。如果没有配置,将会生成一个名字,格式是:"DataSource-" + System.identityHashCode(this)。配置此属性版本至少为 1.0.5,低于该版本设置 name 会出错。
url连接数据库的 url
username连接数据库的用户名
password连接数据库的密码。如果你不希望密码直接写在配置文件中,可以使用ConfigFilter。
driverClassName根据url自动识别这一项可配可不配,如果不配置 Druid 会根据 url 自动识别 dbType,然后选择相应的 driverClassName
initialSize0初始化时建立物理连接的个数。初始化发生在显示调用 init 方法,或者第一次 getConnection 时
maxActive8最大连接池数量
maxIdle8已经不再使用,配置了也没效果
minIdle最小连接池数量
maxWait获取连接时最大等待时间,单位毫秒。配置了 maxWait 之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock 属性为 true 使用非公平锁。
poolPreparedStatementsfalse是否缓存 preparedStatement,也就是 PSCache。PSCache 对支持游标的数据库性能提升巨大,比如说 oracle。在 mysql 下建议关闭。
maxPoolPreparedStatementPerConnectionSize-1要启用 PSCache,必须配置大于 0,当大于 0 时,poolPreparedStatements 自动触发修改为 true。在 Druid 中,不会存在 Oracle下 PSCache 占用内存过多的问题,可以把这个数值配置大一些,比如说 100
validationQuery用来检测连接是否有效的 sql,要求是一个查询语句,常用select 'x'。如果 validationQuery 为 null,testOnBorrow、testOnReturn、testWhileIdle 都不会起作用。
validationQueryTimeout单位:秒,检测连接是否有效的超时时间。底层调用 jdbc Statement对象的 void setQueryTimeout(int seconds) 方法
testOnBorrowtrue申请连接时执行 validationQuery 检测连接是否有效,做了这个配置会降低性能。
testOnReturnfalse归还连接时执行 validationQuery 检测连接是否有效,做了这个配置会降低性能。
testWhileIdlefalse建议配置为 true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于 timeBetweenEvictionRunsMillis,执行validationQuery 检测连接是否有效。
keepAlivefalse
(1.0.28)
连接池中的 minIdle 数量以内的连接,空闲时间超过 minEvictableIdleTimeMillis,则会执行 keepAlive 操作。
timeBetweenEvictionRunsMillis1分钟(1.0.14)有两个含义:
1) Destroy 线程会检测连接的间隔时间,如果连接空闲时间大于等于 minEvictableIdleTimeMillis 则关闭物理连接。
2) testWhileIdle 的判断依据,详细看 testWhileIdle 属性的说明
numTestsPerEvictionRun30分钟(1.0.14)不再使用,一个 DruidDataSource 只支持一个 EvictionRun
minEvictableIdleTimeMillis连接保持空闲而不被驱逐的最小时间
connectionInitSqls物理连接初始化的时候执行的 sql
exceptionSorter根据dbType自动识别当数据库抛出一些不可恢复的异常时,抛弃连接
filters属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有:
监控统计用的 filter:stat
日志用的 filter:log4j
防御 sql 注入的 filter:wall
proxyFilters类型是List<com.alibaba.druid.filter.Filter>,如果同时配置了 filters 和 proxyFilters,是组合关系,并非替换关系

2、使用

2.1、直接使用

2.1.1、引入依赖
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.8</version>
</dependency>
2.1.2、使用例子

复制代码

package com.abc.demo.general.dbpool;

import com.alibaba.druid.pool.DruidDataSource;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DruidCase {
    public static void main(String[] args) {
        DruidDataSource druidDataSource = new DruidDataSource();
        Connection connection = null;
        try {
            druidDataSource.setName("测试连接池");
            druidDataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
            druidDataSource.setUrl("jdbc:mysql://10.49.196.11:3306/mydb?useUnicode=true&characterEncoding=UTF-8");
            druidDataSource.setUsername("root");
            druidDataSource.setPassword("123456");
            druidDataSource.setInitialSize(2);
            druidDataSource.setMinIdle(2);
            druidDataSource.setMaxActive(5);
            druidDataSource.setValidationQuery("select 1");
            druidDataSource.setTestWhileIdle(true);
            druidDataSource.setTestOnBorrow(true);
            druidDataSource.setTestOnReturn(false);
            druidDataSource.setMaxWait(6000);
            druidDataSource.setFilters("slf4j");

            connection = druidDataSource.getConnection();
            Statement st = connection.createStatement();
            ResultSet rs = st.executeQuery("select version()");
            if (rs.next()) {
                System.out.println(rs.getString(1));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            close(connection);
        }

        //实际使用中一般是在应用启动时初始化数据源,应用从数据源中获取连接;并不会关闭数据源。
        druidDataSource.close();
    }

    private static void close(Connection connection) {
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

复制代码

2.2、在 SpringBoot 中使用

2.1.1、引入依赖

复制代码

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.12.RELEASE</version>
    <relativePath />
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
    </dependency>

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.2.8</version>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
</dependencies>

复制代码

2.1.2、单数据源

application.yml 配置:

复制代码

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://10.49.196.11:3306/mydb?useUnicode=true&characterEncoding=UTF-8
    username: root
    password: 123456
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      initial-size: 2
      min-idle: 2
      max-active: 5
      validation-query: select 1
      test-while-idle: true
      test-on-borrow: true
      test-on-return: false
      max-wait: 6000
      filter: slf4j

复制代码

使用:

@Autowired
private DataSource dataSource;
2.1.3、多数据源

application.yml 配置:

复制代码

spring:
  datasource:
    druid:
      db1:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://10.140.9.11:3306/mydb?useUnicode=true&characterEncoding=UTF-8
        username: root
        password: 123456
        initial-size: 2
        min-idle: 2
        max-active: 5
        validation-query: select 1
        test-while-idle: true
        test-on-borrow: true
        test-on-return: false
        max-wait: 6000
        filter: slf4j
      db2:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://10.49.196.12:3306/mydb?useUnicode=true&characterEncoding=UTF-8
        username: root
        password: 123456
        initial-size: 2
        min-idle: 2
        max-active: 5
        validation-query: select 1
        test-while-idle: true
        test-on-borrow: true
        test-on-return: false
        max-wait: 6000
        filter: slf4j

复制代码

数据源配置类:

复制代码

package com.abc.demo.config;

import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;

import javax.sql.DataSource;

@Configuration
public class DataSourceConfig {
    @Primary
    @Bean("dataSource1")
    @ConfigurationProperties("spring.datasource.druid.db1")
    public DataSource dataSourceOne(){
        return DruidDataSourceBuilder.create().build();
    }

    @Bean("dataSource2")
    @ConfigurationProperties("spring.datasource.druid.db2")
    public DataSource dataSourceTwo(){
        return DruidDataSourceBuilder.create().build();
    }
}

复制代码

使用:

复制代码

@Autowired
@Qualifier("dataSource1")
private DataSource dataSource1;

@Autowired
@Qualifier("dataSource2")
private DataSource dataSource2;

复制代码

2.1.4、开启监控功能

Druid 内置了一些监控,Spring Boot 环境下通过少量配置就可开启这些功能。

application.yml 配置:

复制代码

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://10.49.196.11:3306/mydb?useUnicode=true&characterEncoding=UTF-8
    username: root
    password: InsYR0ot187!
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      initial-size: 2
      min-idle: 2
      max-active: 5
      validation-query: select 1
      test-while-idle: true
      test-on-borrow: true
      test-on-return: false
      max-wait: 6000
      filter: slf4j,stat,wall #启用日志、监控统计、防火墙功能
      web-stat-filter:    #web监控配置
        enabled: true
      stat-view-servlet:  #监控页面配置
        enabled: true
        url-pattern: /druid/*

复制代码

监控页面:

Spring Boot 中集成 Druid 的详细说明可以参考官网文档:https://hub.fastgit.org/alibaba/druid/tree/master/druid-spring-boot-starter

标签: 数据库连接池

介绍Druid连接池 Druid连接池是阿里巴巴开源的一款基于JDBC规范的高性能连接池。它支持MySQL, PostgreSQL, Oracle, DB2, Microsoft SQL Server等数据库,而且Druid提供了监控功能,可以监控连接池的状态。下面将详细介绍Druid连接池的使用及其特点。 阅读详情

相关推荐

大并发下数据库连接池参数配置优化

JDBC连接是长连接,为了保活,连接池有4种设置,我们进行取舍时,主要是对性能、连接有效性进行平衡考虑。

泰山与水 4367

Druid连接池

首先介绍几个本人在学习Druid时,获益非常大的网站。 1.Druid的官网:http://druid.io/ 2.Druid的github网址: https://github.com/alibaba/druid 3.Druid的github子站,常见问题解析: https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%A...

北辰之北灬的博客 5405

连接池之Druid连接池

Druid是什么呢? Druid首先是一个数据库连接池。Druid可以说是目前比较好的数据库连接池,毕竟是阿里出品,必属精品.在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource DRUID是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控,可以很...

逸雅安然 523

springboot学习笔记11:集成Druid

springboot学习笔记11:集成Druid 什么是Druid Java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池。 Druid 是阿里巴巴开源平台上一个数据库连接池实现,结合了 C3P0、DBCP 等 DB 池的优点,同时加入了日志监控。 Druid 可以很好的监控 DB 池连接和 SQL 的执行情况,天生就是针对监控而生的 DB 连接池。 Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。 Spring Boot 2.

好汤圆的博客 3397

Jenkins中文显示不全?三步搞定Locale插件+汉化包的正确安装姿势

本文针对Jenkins界面中文显示不全问题,提供从原理到实战的深度解决方案。文章详细解析了Locale插件与中文语言包的核心机制,并分步指导如何通过配置JVM环境、正确安装插件及执行深度排查,彻底解决汉化顽疾,实现Jenkins界面的完美中文显示。

weixin_42611310的博客 259

【ESP32-S3量产指南】基于Flash下载工具实现Release模式Flash加密与安全配置

本文详细介绍了ESP32-S3量产阶段如何通过Flash下载工具实现Release模式下的Flash加密与安全配置。从加密模式选择、工具配置到分区表优化,提供了一套完整的量产安全解决方案,帮助开发者有效防止固件泄露和篡改,确保设备安全。

weixin_28730131的博客 230

DRUID连接池

DRUID连接池Druid是阿里巴巴开发的号称为监控而生的数据库连接池,Druid是目前最好的数据库连接池。 在功能、性能、扩展性方面,都超过其他数据库连接池,同时加入了日志监控, 可以很好的监控DB池连接和SQL的执行情况。 ​ Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。 ​ DRUID连接池使用的jar包: druid-1.0.9.jarDRUID...

h294590501的专栏 2万+

SAP 对接CBS(http方式)

CLEAR:lv_xml_crc32_string. CONCATENATEcrc32_passwordcrc32_keyi_stringINTOlv_xml_crc32_string. CONDENSElv_xml_crc32_string. CALLFUNCTION'SCMS_STRING_TO_XSTRING' EXPORTING text=lv_xml_crc32_string encoding='8400' "GB...

3597

Druid之连接池

需要注意的是,我们下面提供的几种实现方式都是基于简单的原型,目的是带你了解连接池实现的一些基本原理。真实的数据库连接池技术需要考虑更多复杂的细节。 所以下面这些代码都是不能在生产上直接使用的。 实现的时候会用到java.sql.Connection,由于这个只是一个接口无法创建实例,为了演示方便,我继承这个接口写了一个简单的测试类,只是在commit方法里加了延时模拟提交。 实现方式1: 很容易马上想到的一种方案,我们用一个map存放连接对象,需要的时候从map里拿来用就可以了。

louie_zhao的博客 5699

LSTM cell结构的理解和计算

LSTM是传统RNN网络的扩展,其核心结构是其cell单元,网上LSTM的相关资料繁多,质量参差不齐,下面主要结合LSTM神经网络的详细推导和 Christopher Olah的blog两篇文章中的内容进行说明。主要介绍网络如何计算,为何这么算先不展开:)。前者一副图加上29个公式,简洁明了;后者娓娓道来,适合初学者。首先是LSTM cell最常见的结构图: 这是变形的版本(找不到更清晰的版本了),

songhk0209的博客 2万+

下载igv报错:Error loading genome hg38raw.githubusercontent.com...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 988

Mysql-druid连接池

Mysql-druid是一个用于连接和管理MySQL数据库的开源项目。它提供了一种简化和优化MySQL数据库访问的方式,以提高性能和可靠性。

架构师之路。。 1436

第七节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入门 - 用户管理(上)

本节的内容是用户管理,后端Python代码的实现。

cuiwin的专栏 777

druid连接池的使用

1、数据库连接池理解 连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。 2、druid连接池 maven配置及配置文件使用 (1)druid连接池的maven依赖添加 添加druid连接池的依赖、数据库驱动 <!-- https://mvnrepository.com/artifact/mysql/mysql

m0_58680865的博客 2408

计算机网络基础:认识网络硬件与传输介质

计算机网络基础:认识网络硬件与传输介质,在计算机网络的庞大体系中,网络硬件与传输介质犹如坚实的骨架与脉络,支撑并承载着信息的流动。从家庭中的小型网络,到企业复杂的办公网络,再到覆盖全球的互联网,各类网络硬件设备各司其职,不同的传输介质发挥着独特的传输作用。它们相互协作,使得数据能够在不同设备之间快速、准确地传输,为人们的日常沟通、工作办公、娱乐休闲等活动提供了基础保障。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 3万+

Python爬虫实战:美团商家数据采集系统

本文将详细介绍如何使用Python最新技术栈构建高效的美团商家信息采集系统。内容涵盖异步爬虫、反爬对抗、数据存储、可视化分析等完整流程,提供可落地的代码方案和工程实践。

2201_76125261的博客 2658

Druid连接池配置

文章目录1. 使用连接池的优势2. Druid连接池配置及说明引入资源application.yml中配置 返回目录 1. 使用连接池的优势 资源复用。减少创建、销毁连接时巨大的性能消耗 提高响应速度。这个很好理解,在需要进行连接时直接从连接池中取连接肯定要比创建连接速度要快。 减少连接泄露。比如MySQL数据库默认8小时自动断开连接,如果程序还在连接中会自动断开,而是用连接池通过判断连接是否有效可以自动规避这种情况的出现。 2. Druid连接池配置及说明 引入资源 <dependency&g

七夜之家 931

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

JDBC:Druid连接池

C3P0连接池的使用 环境:eclipse+mysql80 一、下载工具包 druid工具包:https://pan.baidu.com/s/1KogYNcytyuelN4tu0wkPiA 提取码:w0mg mysql驱动包:https://dev.mysql.com/downloads/connector/j 二、导入驱动包 在根目录新建 libs 文件夹 (文件夹随意...

health的博客 970

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: HikariCP 连接池
井口之蛙星星之萤
博客等级 码龄9年 166粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值