Druid连接池技术实践

news2024/11/28 6:54:17

什么是Druid连接池?
Druid连接池是阿里巴巴开源的数据库连接池项目。

Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能。功能强大,能防SQL注入,内置Loging能诊断Hack应用行为。

哦,首先Druid是一个数据库连接池,第一次学,我也不知道,那么先来看看什么的数据库连接池

什么是数据库连接池?
数据库连接池(Database Connection Pooling)在程序初始化时创建一定数量的数据库连接对象并将其保存在一块内存区中,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接以避免因为没有释放数据库连接而引起的数据库连接遗漏。

即在程序初始化的时候创建一定数量的数据库连接,用完可以放回去,下一个在接着用,通过配置连接池的参数来控制连接池中的初始连接数、最小连接、最大连接、最大空闲时间这些参数保证访问数据库的数量在一定可控制的范围类,防止系统崩溃,使用户的体验好

哦,懂了,跟那个线程池似的

再来看看它是干嘛的?
刚才说道他的作用: Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能。功能强大,能防SQL注入,内置Loging能诊断Hack应用行为。

哦,懂了,监控对数据库的行为的

那他有什么意义呢?
数据库连接池的意义在于,能够重复利用数据库连接,提高对请求的响应时间和服务器的性能。

连接池中提前预先建立了多个数据库连接对象,然后将连接对象保存到连接池中,当客户请求到来时,直接从池中取出一个连接对象为客户服务,当请求完成之后,客户程序调用close()方法,将连接对象放回池中。

哦,懂了,提高了数据库连接效率(提高对请求的响应时间和服务器的性能)

那为什么就用它呢?
各产品性能指标如下:

Druid连接池在性能、监控、诊断、安全、扩展性这些方面远远超出竞品
在这里插入图片描述

哦,懂了,因为Druid它牛在这里插入图片描述

哦,那怎么用?
查了半天有人说是先要管理配置DataSource连接池对象

那先看看什么是DataSource,这个不要慌,翻译成中文就好,就是数据源(数据源就是一个数据的来源,在这相当于数据库)

说到这扩展一下什么是DataSource对象:

什么是DataSource对象?
DataSource对象是javax.sql包中的一个接口,其实就是可以标识为一个数据库连接资源,数据源对象里面应该存储连接的url,用户名和密码等连接信息。

哦,DataSource对象是个接口,放数据库连接信息的

在使用JDBC连接数据库的时候,都使用通过DriverManager进行获取Connection对象,getConnection方法都需要传递url,name.passwd等信息,其实这些信息就是可以充当一个数据源对象。

那什么是DataSource连接池呢?
翻译成中文就是数据源连接池。数据源就是一个数据的来源,相当于数据库。

但是程序去访问数据库并不直接访问,会通过一个代理,也就是数据连接池,每一个数据连接池引用的对象肯定有数据源。DataSource的实现子类有很多,其中很多第三方的连接池都是需要实现DataSource的,如果创建一个带数据池的数据源,则就有连接池功能了。在这里插入图片描述

在这里插入图片描述
配置参数
和其它连接池一样DRUID的DataSource类为:com.alibaba.druid.pool.DruidDataSource,基本配置参数如下:

配置 缺省值 说明
name 配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来。
如果没有配置,将会生成一个名字,格式是:“DataSource-” + System.identityHashCode(this)
jdbcUrl 连接数据库的url,不同数据库不一样。例如:
mysql : jdbc:mysql://10.20.153.104:3306/druid2
oracle : jdbc:oracle:thin:@10.20.149.85:1521:ocnauto
username 连接数据库的用户名
password 连接数据库的密码。如果你不希望密码直接写在配置文件中,可以使用ConfigFilter。详细看这里:https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter
driverClassName 根据url自动识别 这一项可配可不配,如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassName(建议配置下)
initialSize 0 初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
maxActive 8 最大连接池数量
maxIdle 8 已经不再使用,配置了也没效果
minIdle 最小连接池数量
maxWait 获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
poolPreparedStatements false 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
maxOpenPreparedStatements -1 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100
validationQuery 用来检测连接是否有效的sql,要求是一个查询语句。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会其作用。
testOnBorrow true 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
testOnReturn false 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
testWhileIdle false 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
timeBetweenEvictionRunsMillis 有两个含义:

  1. Destroy线程会检测连接的间隔时间2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明
    numTestsPerEvictionRun 不再使用,一个DruidDataSource只支持一个EvictionRun
    minEvictableIdleTimeMillis
    connectionInitSqls 物理连接初始化的时候执行的sql
    exceptionSorter 根据dbType自动识别 当数据库抛出一些不可恢复的异常时,抛弃连接
    filters 属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有:
    监控统计用的filter:stat日志用的filter:log4j防御sql注入的filter:wall
    proxyFilters
    类型是List<com.alibaba.druid.filter.Filter>,如果同时配置了filters和proxyFilters,是组合关系,并非替换关系

使用方法
DB数据源的使用方法也就是2种,一种是在代码中写死通过NEW操作符创建DataSSource,然后set一些连接属性,这里不在累述;另外一种是基于SPRING的配置方法,然后让SPRING的Context自动加载配置(以下配置文件默认都在项目根目录下conf文件夹中)

1、属性文件:application.properties(DataSource连接参数)

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/test
jdbc.username=root
jdbc.password=1qaz!QAZ
在这里插入图片描述
测试五步骤:

        //从第三步开始;
        Properties prop=new Properties();
        //加载文件;方式一:读取文件,需要把配置文件放在项目下;
        //prop.load(new FileReader("druid.properties"));

        //方式二:位置在src下;
        InputStream is = Demo02连接池.class.getClassLoader().getResourceAsStream("druid.properties");
        prop.load(is);
        //System.out.println(prop);
        //第四步:获取连接池对象;
        //德罗伊连接池工厂.通过prop来创建连接池对象;因为要指定连接到哪个ip?哪个端口?哪个数据库?
        DataSource ds= DruidDataSourceFactory.createDataSource(prop);
        //第五步;
        Connection conn = ds.getConnection();
        System.out.println(conn);

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

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

相关文章

2023ACP世界大赛教育者论坛:让职业教育直面AI机遇与挑战

“AI技术的普及对创意行业和教育带来的影响和变革-2023 Adobe Certified Professional教育者论坛”在苏州西交利物浦大学成功举办。 本次论坛&#xff0c;由Adobe Certified Professional 世界大赛中国赛区组委会主办&#xff0c;联动了来自院校、海内外杰出的创意公司及国际知…

搭建飞书早报机器人

飞书是字节跳动推出的一款企业级通讯及协作平台&#xff0c;于2016年正式上线。它是一款基于云计算技术的软件工具&#xff0c;可以帮助企业实现快速高效的沟通和协作&#xff0c;提升工作效率&#xff0c;降低沟通成本。下面将详细介绍飞书的功能、特点以及使用体验。 功能介…

Android动画深入分析(View动画)

Android动画深入分析(View动画) Android的动画我其实在View的滑动里面写过,主要还是分为2点。 一个就是View动画&#xff0c;还有一个是属性动画 先讲述View动画 View动画 View动画主要分为4种,平移动画,缩放动画,旋转动画,透明度动画。 还有一个叫帧动画,但是表现方式和…

python+vue旅游攻略分享推荐网站p0667

基于Python语言设计并实现了旅游分享网站。该系统基于B/S即所谓浏览器/服务器模式&#xff0c;应用Django框架&#xff0c;选择MySQL作为后台数据库。系统主要包括用户、景点信息、攻略分类、旅游攻略、门票购买、留言反馈、论坛管理、系统管理等功能模块。 软件开发前的需求分…

某渣渣企业平台相关加密参数

网址 aHR0cHM6Ly93d3cucWNjLmNvbS93ZWIvZWxpYi90ZWNsaXN0P3RlYz1UX1RTTUVT抓包 GET /api/elib/getTecList?countyCode110101&flag&industry&isSortAsc&pageIndex2&pageSize20&provinceBJ&registCapiBegin&registCapiEnd&searchKey&…

修改git已经push到远端的最近一次提交的commit

需求&#xff1a; 最新一次提交的message写错了且已经push到远程仓库&#xff0c;但是又不想重新创建一个commit记录。 注意&#xff1a; 如果是多人协同开发&#xff0c;使用强推前一定确保当前版本最新&#xff0c;期间无人提交代码。 使用git Bash进入命令行窗口 git co…

基于langChain 的privateGPT 文档问答 研究

参考&#xff1a;gihtub代码 https://github.com/imartinez/privateGPT 官网 privateGPT可以在断网的情况下&#xff0c;借助GPT和文档进行交互&#xff0c;有利于保护数据隐私。 privateGPT可以有四个用处&#xff1a; 1.增强知识管理&#xff1a;私有LLMs自动化&#xff0c…

《Spring Guides系列学习》guide26 - guide30

要想全面快速学习Spring的内容&#xff0c;最好的方法肯定是先去Spring官网去查阅文档&#xff0c;在Spring官网中找到了适合新手了解的官网Guides&#xff0c;一共68篇&#xff0c;打算全部过一遍&#xff0c;能尽量全面的了解Spring框架的每个特性和功能。 接着上篇看过的gu…

numpy库报错has no attribute ‘_no_nep50_warning‘的解决

本文介绍在Python中&#xff0c;numpy库出现报错module numpy has no attribute _no_nep50_warning的解决方法。 一次&#xff0c;在运行一个Python代码时&#xff0c;发现出现报错module numpy has no attribute _no_nep50_warning&#xff0c;如下图所示。 其中&#xff0c;这…

华为nova11系列:一个月的深度体验感受,告诉你值不值得入手

作为一个追求时尚风格的年轻人&#xff0c; nova系列手机一直是我的关注重点。nova 11 Pro发布之后&#xff0c;独特少见的11号色一下子就戳中了我&#xff0c;于是第一时间我给我自己和我老婆分别下单了一台nova 11和nova 11 Pro。 作为主力机深度使用一个月后&#xff0c;可以…

如何做好建筑行业的信息化建设?

如何做好建筑行业的信息化建设&#xff1f; 首先&#xff0c;我们来了解一下&#xff0c;什么是信息化转型&#xff1f; 信息化转型是指企业或组织通过应用信息技术&#xff0c;以提高业务效率和创新能力&#xff0c;实现组织战略目标的过程。 随着数字技术的发展&#xff0…

把字节大佬花3个月时间整理的软件测试面经偷偷给室友,差点被他开除了···

写在前面 “这份软件测试面经看起来不错&#xff0c;等会一起发给他吧”&#xff0c;我看着面前的面试笔记自言自语道。 就在这时&#xff0c;背后传来了leder“阴森森”的声音&#xff1a;“不错吧&#xff0c;我可是足足花了三个月整理的” 始末 刚入职字节的我收到了大学室…

Junit常见用法

一.Junit的含义 Junit是一种Java编程语言的单元测试框架。它提供了一些用于编写和运行测试的注释和断言方法&#xff0c;并且可以方便地执行测试并生成测试报告。Junit是开源的&#xff0c;也是广泛使用的单元测试框架之一。 二.Junit常用注解 1.Test 表示执行此测试用例 T…

代码随想录训练营Day51| 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组

目录 学习目标 学习内容 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组 学习目标 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组 学习内容 300.最长递增子序列 300. 最长递增子序列 - 力扣&#xff08;LeetCode&#xff09;https…

便携式水质检测仪应用范围

随着环境污染的加剧&#xff0c;人们对水质检测的关注越来越多。传统的水质检测仪器往往只能测定单一参数&#xff0c;难以全面准确地反映水质情况。而多参数水质检测仪可以实现同时测定多个参数&#xff0c;为水质检测提供了更加全面准确的数据。它采用多种先进的技术&#xf…

STM32【H7】理论——MPU、Cache

文章目录 1. MPU - 内存保护单元 1. MPU - 内存保护单元 MPU&#xff1a;(Memory Protection Unit,内存保护单元),早在 STM32F1 和 F4 芯片上面也是有这个功能的,但是基本用不上。但是到了 H7 就得用上了,因为要设置 Cache&#xff1b; MPU的作用&#xff1a; 将 memory map&a…

医疗健康元宇宙仿真场景为治疗提供个性化方案

虚拟现实VR元宇宙是一种基于VR虚拟现实制作的全新交互平台&#xff0c;可以为用户提供沉浸式的体验。随着人们对医院就诊服务要求不断提高&#xff0c;借助VR元宇宙平台&#xff0c;将医生为医生、护士和患者提供了一个全新的交流和治疗场景&#xff0c;对提高诊疗水平和服务体…

「实在RPA·税务数字员工」助力税务乘上数字化转型快车

中共中央办公厅国务印发《关于进一步深化税收征管改革的意见》表示&#xff1a;着力建设以服务纳税人缴费人为中心、以发票电子化为改革突破口、以税收大数据为驱动力的具有高集成功能、高安全性能、高应用效能的智慧税务。2023年实现从经验式执法向科学精确执法转变&#xff1…

k8s滚动更新

1.编写一个yaml文件 vi deployment-nginx.yaml apiVersion: apps/v1 kind: Deployment metadata: labels:app: nginxname: nginxnamespace: default spec:replicas: 3progressDeadlineSeconds: 600 #表示在这个时间段内&#xff0c;如果 Deployment 的 Pod 没有完成更新&…

EtherCAT运动控制卡开发教程之python

众所周知&#xff0c;Python作为一门面向对象的新兴开发语言&#xff0c;具有非常完善的基础代码库&#xff0c;更注重实用&#xff0c;同时代码可读极强&#xff0c;编写完程序即可直接运行&#xff0c;被越来越多的人广泛将它用于机器视觉和自动化控制。 今天正运动技术与大…