数据库阿里连接池 druid配置详解
转自:http://blog.csdn.net/hj7jay/article/details/51686418
Java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,有不得不使用数据库连接池。数据库连接池有很多选择,c3p、dhcp、proxool等,druid作为一名后起之秀,凭借其出色的性能,也逐渐印入了大家的眼帘。接下来本教程就说一下druid的简单使用。
http://repo1.maven.org/maven2/com/alibaba/druid/ 下载最新的jar包。如果想使用最新的源码编译,可以从 https://github.com/alibaba/druid 下载源码,然后使用maven命令行,或者导入到eclipse中进行编译。
和dbcp类似,druid的配置项如下
配置 | 缺省值 | 说明 |
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。 在mysql5.5以下的版本中没有PSCache功能,建议关闭掉。 作者在5.5版本中使用PSCache,通过监控界面发现PSCache有缓存命中率记录, 该应该是支持PSCache。 |
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, 是组合关系,并非替换关系 |
加入 druid-1.0.9.jar
ApplicationContext.xml
< bean name = "transactionManager" class ="org.springframework.jdbc.datasource.DataSourceTransactionManager" > < property name = "dataSource" ref = "dataSource" ></ property > </ bean > < bean id = "propertyConfigurer" class ="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" > < property name = "locations" > < list > < value > /WEB-INF/classes/dbconfig.properties </ value > </ list > </ property > </ bean >
ApplicationContext.xml配置druid
1 <!-- 阿里 druid 数据库连接池 --> 2 < bean id = "dataSource" class = "com.alibaba.druid.pool.DruidDataSource"destroy-method = "close" > 3 <!-- 数据库基本信息配置 --> 4 < property name = "url" value = "${url}" /> 5 < property name = "username" value = "${username}" /> 6 < property name = "password" value = "${password}" /> 7 < property name = "driverClassName" value = "${driverClassName}" /> 8 < property name = "filters" value = "${filters}" /> 9 <!-- 最大并发连接数 --> 10 < property name = "maxActive" value = "${maxActive}" /> 11 <!-- 初始化连接数量 --> 12 < property name = "initialSize" value = "${initialSize}" /> 13 <!-- 配置获取连接等待超时的时间 --> 14 < property name = "maxWait" value = "${maxWait}" /> 15 <!-- 最小空闲连接数 --> 16 < property name = "minIdle" value = "${minIdle}" /> 17 <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> 18 < property name = "timeBetweenEvictionRunsMillis" value ="${timeBetweenEvictionRunsMillis}" /> 19 <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --> 20 < property name = "minEvictableIdleTimeMillis" value ="${minEvictableIdleTimeMillis}" /> 21 < property name = "validationQuery" value = "${validationQuery}" /> 22 < property name = "testWhileIdle" value = "${testWhileIdle}" /> 23 < property name = "testOnBorrow" value = "${testOnBorrow}" /> 24 < property name = "testOnReturn" value = "${testOnReturn}" /> 25 < property name = "maxOpenPreparedStatements" value ="${maxOpenPreparedStatements}" /> 26 <!-- 打开 removeAbandoned 功能 --> 27 < property name = "removeAbandoned" value = "${removeAbandoned}" /> 28 <!-- 1800 秒,也就是 30 分钟 --> 29 < property name = "removeAbandonedTimeout" value ="${removeAbandonedTimeout}" /> 30 <!-- 关闭 abanded 连接时输出错误日志 --> 31 < property name = "logAbandoned" value = "${logAbandoned}" /> 32 </ bean >
dbconfig.properties
1 url: jdbc:mysql:// localhost :3306/ newm 2 driverClassName: com.mysql.jdbc.Driver 3 username: root 4 password: root 5 filters: stat 6 maxActive: 20 7 initialSize: 1 8 maxWait: 60000 9 minIdle: 10 10 maxIdle: 15 11 timeBetweenEvictionRunsMillis: 60000 12 minEvictableIdleTimeMillis: 300000 13 validationQuery: SELECT 'x' 14 testWhileIdle: true 15 testOnBorrow: false 16 testOnReturn: false 17 maxOpenPreparedStatements: 20 18 removeAbandoned: true 19 removeAbandonedTimeout: 1800 20 logAbandoned: true
web.xml
1 <!-- 连接池 启用 Web 监控统计功能 start--> 2 < filter > 3 < filter-name > DruidWebStatFilter </ filter-name > 4 < filter-class > com.alibaba.druid.support.http.WebStatFilter </ filter-class > 5 < init-param > 6 < param-name > exclusions </ param-name > 7 < param-value > *. js ,*. gif ,*. jpg ,*. png ,*. css ,*. ico ,/ druid /* </ param-value > 8 </ init-param > 9 </ filter > 10 < filter-mapping > 11 < filter-name > DruidWebStatFilter </ filter-name > 12 < url-pattern > /* </ url-pattern > 13 </ filter-mapping > 14 < servlet > 15 < servlet-name > DruidStatView </ servlet-name > 16 < servlet-class > com.alibaba.druid.support.http.StatViewServlet </ servlet-class > 17 </ servlet > 18 < servlet-mapping > 19 < servlet-name > DruidStatView </ servlet-name > 20 < url-pattern > / druid /* </ url-pattern > 21 </ servlet-mapping > 22 <!-- 连接池 启用 Web 监控统计功能 end-->
访问监控页面: http://ip:port/projectName/druid/index.html
不积跬步,无以至千里;不积小流,无以成江海
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!