DRUID连接池的实用 配置详解

文章目录

    • DRUID介绍
    • 配置参数
    • 基于纯Java代码使用(不建议使用):
    • ds.properties内容:
    • 基于Spring的配置:
    • 浏览器验证功能

DRUID介绍

DRUID是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB连接池

配置参数

和其它连接池一样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(建议配置下)
initialSize0初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
maxActive8最大连接池数量
maxIdle8已经不再使用,配置了也没效果
minIdle最小连接池数量
maxWait获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
poolPreparedStatementsfalse是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
maxOpenPreparedStatements-1要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100
validationQuery用来检测连接是否有效的sql,要求是一个查询语句。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会其作用。
testOnBorrowtrue申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
testOnReturnfalse归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
testWhileIdlefalse建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
timeBetweenEvictionRunsMillis有两个含义:
1) Destroy线程会检测连接的间隔时间2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明
numTestsPerEvictionRun不再使用,一个DruidDataSource只支持一个EvictionRun
testWhileIdlefalse建议配置为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,是组合关系,并非替换关系

基于纯Java代码使用(不建议使用):

package demo.test;import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;import javax.sql.DataSource;import com.alibaba.druid.pool.DruidDataSourceFactory;public class DBUtil {private static DataSource ds = null;	static {try{InputStream in = DBUtil.class.getClassLoader().getResourceAsStream("ds.properties");Properties props = new Properties();props.load(in);ds = DruidDataSourceFactory.createDataSource(props);}catch(Exception ex){ex.printStackTrace();}}public static Connection openConnection() throws SQLException{return ds.getConnection();}	}

ds.properties内容:

driverClassName = oracle.jdbc.driver.OracleDriver
url = jdbc:oracle:thin:@127.0.0.1:1521:ORCL
username = ******
password = ******initialSize = 5
maxActive = 10
minIdle = 3
maxWait = 60000
removeAbandoned = true
removeAbandonedTimeout = 180
timeBetweenEvictionRunsMillis = 60000
minEvictableIdleTimeMillis = 300000
validationQuery = SELECT 1 FROM DUAL
testWhileIdle = true 
testOnBorrow = false
testOnReturn = false
poolPreparedStatements = true
maxPoolPreparedStatementPerConnectionSize = 50
filters = stat

基于Spring的配置:

<bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource"init-method="init" destroy-method="close"><!-- 数据库基本信息配置 --><property name="driverClassName" value="${oracle.driver}" /><property name="url" value="${oracle.url}" /><property name="username" value="${oracle.username}" /><property name="password" value="${oracle.password}" />		<!-- 初始化连接数量 --><property name="initialSize" value="${druid.initialSize}" /><!-- 最大并发连接数 --><property name="maxActive" value="${druid.maxActive}" /><!-- 最大空闲连接数 --><property name="maxIdle" value="${druid.maxIdle}" /><!-- 最小空闲连接数 --><property name="minIdle" value="${druid.minIdle}" /><!-- 配置获取连接等待超时的时间 -->		<property name="maxWait" value="${druid.maxWait}" /><!-- 超过时间限制是否回收 --><property name="removeAbandoned" value="${druid.removeAbandoned}" /><!-- 超过时间限制多长; --><property name="removeAbandonedTimeout" value="${druid.removeAbandonedTimeout}" /><!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --><property name="timeBetweenEvictionRunsMillis" value="${druid.timeBetweenEvictionRunsMillis}" /><!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --><property name="minEvictableIdleTimeMillis" value="${druid.minEvictableIdleTimeMillis}" /><!-- 用来检测连接是否有效的sql,要求是一个查询语句-->	<property name="validationQuery" value="${druid.validationQuery}" /><!-- 申请连接的时候检测 --><property name="testWhileIdle" value="${druid.testWhileIdle}" /><!-- 申请连接时执行validationQuery检测连接是否有效,配置为true会降低性能 --><property name="testOnBorrow" value="${druid.testOnBorrow}" /><!-- 归还连接时执行validationQuery检测连接是否有效,配置为true会降低性能  --><property name="testOnReturn" value="${druid.testOnReturn}" /><!-- 打开PSCache,并且指定每个连接上PSCache的大小 --><property name="poolPreparedStatements" value="${druid.poolPreparedStatements}" />		<property name="maxPoolPreparedStatementPerConnectionSize" value="${druid.maxPoolPreparedStatementPerConnectionSize}" /><!--属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有:  				监控统计用的filter:stat日志用的filter:log4j防御SQL注入的filter:wall --><property name="filters" value="${druid.filters}" />		</bean>

启用Web监控统计功能需要在Web应用的web.xml中加入以下内容:

<filter><filter-name>DruidWebStatFilter</filter-name><filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class><init-param><param-name>exclusions</param-name><param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value></init-param>
</filter>
<filter-mapping><filter-name>DruidWebStatFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>	
<servlet><servlet-name>DruidStatView</servlet-name><servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>	
</servlet>	
<servlet-mapping><servlet-name>DruidStatView</servlet-name><url-pattern>/druid/*</url-pattern>
</servlet-mapping>

浏览器验证功能

访问监控页面:http://ip:port/projectName/druid/index.html

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

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

相关文章

深度学习最佳实践系列——权重w初始化

摘要&#xff1a; 本文是深度学习最佳实践系列博客之权重初始化&#xff0c;主要介绍权重初始化的相关问题及方法&#xff0c;文中提及的权重初始化方法均可以应用于普通的神经网络、卷积神经网络和递归神经网络之中。作为深度学习的初学者&#xff0c;我有意识到的一件事情&am…

arcmap发布三维地图_如何使用高程DEM建立三维地图模型(Arcgis ArcScene)

同步视频教程(一)&#xff1a;(二)&#xff1a;(三)&#xff1a;最新三维&#xff1a;相关教程&#xff1a;3DMAX三维制作地形图教程 工具准备1、BIGEMAP地图下载器2、ARCGIS10.23、global mapperARCGIS下载地址&#xff1a;Global mepper下载地址&#xff1a;资料准备下载你必…

七种功能强大的聊天机器人平台

摘要&#xff1a; 本文主要介绍了七种功能强大的聊天机器人开发平台的特点与优点。聊天机器人发布平台是用户访问和使用聊天机器人的媒介&#xff0c;现在流行的一些聊天机器人发布平台有FB Messenger、Kik、Slack、Telegram以及WeChat。而聊天机器人开发平台是可以创建聊天机器…

uft自动化测试工具安装步骤_自动化功能测试和接口测试工具整理

对于自动化测试&#xff0c;原来谈这方面的内容比较少&#xff0c;但是现在我们做DevOps支撑平台的时候&#xff0c;在整个持续集成和交付的过程中&#xff0c;有一个重要的内容就是自动化测试。自动化测试的覆盖面相当大&#xff0c;其中既包括了CS&#xff0c;BS和移动APP的自…

SSM整合Druid数据库连接池

源码地址&#xff1a;https://gitee.com/gb_90/ssm_druid

奖学金c语言程序,奖学金 (C语言代码)

解题思路:没什么特别的计算&#xff0c;就照原题思路走一遍就行了。注意事项:参考代码:#include#includeint change( int a[500][4],int i,int j){int t;ta[i][0];a[i][0]a[j][0];a[j][0]t;ta[i][1];a[i][1]a[j][1];a[j][1]t;ta[i][2];a[i][2]a[j][2];a[j][2]t;ta[i][3];a[i][3…

实操教程丨如何将一个k3s集群集成到Gitlab项目中

作者|RancherLabs来源|CSDN企业博客关于k3sK3s是由Rancher Labs发布的一个轻量级Kubernetes发行版&#xff0c;这款产品专为在资源有限的环境中运行Kubernetes的研发和运维人员设计。它是经过认证的Kubernetes发行版&#xff0c;其最低的系统要求为&#xff1a;系统内核版本&am…

30个免费资源:涵盖机器学习、深度学习、NLP及自动驾驶

摘要&#xff1a; 本文是一份免费资源清单&#xff0c;涵盖机器学习、深度学习、NLP、AI以及自动驾驶&#xff0c;方便相关研究者选择自己感兴趣的内容资源进行学习随着碎片化的生活越来越日常化&#xff0c;大多数人都喜欢看总结性的的文章&#xff0c;这和时间成本有一定的关…

opendir是安全重入函数吗_Linux系统下读取目录操作及可重入函数介绍

-----在写文章之前&#xff0c;分享一下今晚看伟东山老师的直播收获心得。我自身是一个小菜鸟&#xff0c;第一次听QEMU模拟器软件&#xff0c;不过听完老师的介绍感觉这功能好强大&#xff0c;感觉都不用买硬件了来做实验的(不过还是建议买开发板来做实验&#xff0c;比较有感…

阿里AI界的新伙伴,1秒钟自动生成20000条文案

摘要&#xff1a; 最近&#xff0c;阿里“AI家族”又多了一位新的小伙伴——“AI智能文案”&#xff0c;俗称文案妹。 妹妹具备一个超能力&#xff0c;能仅用1秒钟自动生成20000条文案。 来&#xff0c;大家一起感受一下&#xff1a; 比如说你想买瓶粉底液&#xff0c;根据功效…

华为 招聘 状态 查看_英特尔放弃5G芯片研发:三星受益;爱立信2019年Q1净利润约2.51亿美元;华为也将要与高通和解;天津首个5G电话成功打通...

点击上方“通信人才网” 订阅&#xff01;导读&#xff1a;今日热点 爱立信2019年Q1净利润约2.51亿美元 扭亏为盈近日&#xff0c;爱立信发布截至2019年3月31日的第一季度财报。财报显示&#xff1a;爱立信第一季度净营收为489.06亿瑞典克朗(约合52.93亿美元)&#xff0c;较去年…

异步消息队列中间件

安装&#xff1a; rpm -ivh erlang-18.3-1.el7.centos.x86_64.rpmrpm -ivh socat-1.7.3.2-5.el7.lux.x86_64.rpmrpm -ivh rabbitmq-server-3.6.5-1.noarch.rpm配置文件&#xff1a; vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin/rabbit.app找到loopback_users,把双引…

创纪录!浪潮云海完成OpenStack Rocky版本全球最大规模单一集群测试!

戳蓝字“CSDN云计算”关注我们哦&#xff01;云计算的概念已悄然走过十余年&#xff0c;在助力新兴技术发展的同时&#xff0c;自身也在历经变革。开源作为推动云计算发展的强大动力&#xff0c;于云计算而言&#xff0c;不仅是技术变革的历史潮流&#xff0c;也是相互助推的最…

idea如何反编译字节码指令_美团点评:Java字节码增强技术,线上问题诊断利器...

作者简介&#xff1a;泽恩&#xff0c;美团到店住宿业务研发团队工程师。文章转载于公众号&#xff1a;美团技术团队1. 字节码1.1 什么是字节码&#xff1f;Java之所以可以“一次编译&#xff0c;到处运行”&#xff0c;一是因为JVM针对各种操作系统、平台都进行了定制&#xf…

使用机器学习预测电子竞技游戏《守望先锋》的胜负

摘要&#xff1a; 机器学习可以预测游戏的输赢&#xff1f;来看看Bowen Yang博士是如何构建这一模型的。《守望先锋》中的英雄来自加州大学河滨分校的物理学博士学位的Bowen Yang正在致力于构建一个模型——对游戏中的人物特征进行有意义的学习&#xff0c;来预测电子竞技游戏中…

路由器上的usb接口有什么用_工业主板上有多少种USB接口,红色的USB接口代表什么...

USB接口正式出现是在1996年&#xff0c;一经问世&#xff0c;就成功取代了串口和并口&#xff0c;当然这只是相对于商业电脑和民用电脑而言的&#xff0c;在工控机中还是有串口和并口存在的。USB版本发展至今也已经历好几个阶段&#xff0c;例如USB1.0、USB1.1、USB2.0、USB3.0…

植物大战僵尸不能保存进度

删除下面的所有文件&#xff0c;重新进入游戏即可 C:\ProgramData\PopCap Games\PlantsVsZombies\userdata

Why Redis 4.0?

摘要&#xff1a; 社区最新GA版本Redis 4.0推出已近一年&#xff0c;阿里云数据库Redis 4.0版也上线近半年&#xff0c;之前关于Redis 4.0的系列文章从源码实现来分析这些新功能&#xff0c;本文旨在从用户角度出发&#xff0c;让Redis的用户能够快速了解并使用Redis 4.0带来的…

GitHub 热榜第一!这个 Python 项目超 8.4k 标星,网友:太实用!

这个十一&#xff0c;又经历了一波抢票大战。常规办法根本抢不到&#xff0c;大家就把目光转移到“技术手段”上&#xff0c;顺便把一个Python抢票工具&#xff0c;送到了GitHub趋势榜第一&#xff1a;标星超过8.4k&#xff0c;来自名叫文贤平的程序员。这很可能是全GitHub最德…

c语言点按钮弹窗口,【iOS】按钮点击弹窗

拖入一个Round Rect Button&#xff0c;并将Button的文字修改成“点击弹窗”将ViewController.h修改为如下代码&#xff0c;实则在ViewController.h中添加了一行-(IBAction)messageBoxShow;&#xff0c;注册messageBoxShow这个函数。类似于C语言使用函数之前需要在头文件声明这…