druid连接池初体验

    基本上现在的所有项目都用到了连接池 很方便的一个东西 能够提前生成好连接 使用的时候就能直接拿 用完了放回去就是了 

    近期的一个项目 用到了dp连接池  这个连接池很老了 就算配置配好了 但是连接的速度很慢 而且不稳定 会自动断开 可能考虑到服务器的防火墙断开了没有活动的访问 

    不管其他的 这个连接池的连接速度很慢 会让项目的启动时间很长。。最奇怪的一点是这个连接池会影响到日志的使用 将使用这种连接池的项目的连接池更换后 一直没有反应的日志居然出来了。。 这个我开始也不太相信 我以为是更换连接池的时候 设置了web.xml里面的什么东西 后来再次为老项目更换连接池的时候 特意注意了web.xml里面的东西 发现任何东西都没有改变 但是确实改变了连接池后 日志出来了 。。很诡异。。。

    说到连接速度 个人测试后 发现使用dp连接池的项目启动时间大概在42秒 换为c3p0后 速度为11秒左右 很大的提升 但是c3p0 可能是个人原因 配置太难了 会造成每次的第一次启动项目后的操作数据库变得很慢 再启动就不会了 很奇怪的一点 为了解决这一点 网上也看了很多的方案 都试过了一遍 没有效果  。。最后偶然接触到了阿里的druid连接池 确实给人一种很惊艳的感觉 

   配置:

      

<context:property-placeholder location="classpath:main/resources/jdbc.properties" />
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
    <property name="driverClassName" value="${db.driver}"></property>
    <property name="Url" value="${db.url}"></property>
    <property name="username" value="${db.username}"></property>
    <property name="password" value="${db.password}"></property>
    <!-- 最大并发连接数 -->
    <property name = "maxActive" value = "${maxActive}" />
    <!-- 初始化连接数量 -->
    <property name = "initialSize" value = "${initialSize}" />
    <!-- 配置获取连接等待超时的时间 -->
    <property name = "maxWait" value = "${maxWait}" />
    <!-- 最小空闲连接数 -->
    <property name = "minIdle" value = "${minIdle}" />
    <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
    <property name = "timeBetweenEvictionRunsMillis" value ="${timeBetweenEvictionRunsMillis}" />
    <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
    <property name = "minEvictableIdleTimeMillis" value ="${minEvictableIdleTimeMillis}" />
    <property name = "validationQuery" value = "${validationQuery}" />
    <property name = "testWhileIdle" value = "${testWhileIdle}" />
    <!--申请 归还连接时候的检测 检测连接是否有效 开启会影响性能-->
    <property name = "testOnBorrow" value = "${testOnBorrow}" />
    <property name = "testOnReturn" value = "${testOnReturn}" />
    <property name = "maxOpenPreparedStatements" value ="${maxOpenPreparedStatements}" />
    <!-- 打开 removeAbandoned 功能 -->
    <!--这个功能的意思是当一个连接持有时间大于30分钟就会被close-->
    <property name = "removeAbandoned" value = "${removeAbandoned}" />
    <!-- 1800 秒,也就是 30 分钟 -->
    <property name = "removeAbandonedTimeout" value ="${removeAbandonedTimeout}" />
    <!-- 关闭 abanded 连接时输出错误日志 -->
    <property name = "logAbandoned" value = "${logAbandoned}" />
</bean>

 基本上我能理解的配置都写上去注释了。但是有一点得说 配置检测需要关闭连接的时候 druid并不是随时都在检测 是有活动的时候检测 这意味着druid没有心跳机制 然后这会影响到开头说的那个问题发生 很久没有活动的(大概是半小时 具体看服务器防火墙的设置) 连接会被断开 然后连接池会以为这个连接没有断开 会继续使用 发现走不通 触发检测后 再跳过这个连接 取下一个连接 这个过程的时间不是很长 大概五六秒的样子 这个问题一直没有解决 网上看了很多方案 ,,还是没有效果

接下来再贴一下配置:

db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://数据库地址/
db.username=
db.password=
filters: stat
maxActive: 20
initialSize: 1
maxWait: 60000
minIdle: 10
maxIdle: 15
timeBetweenEvictionRunsMillis:60000
minEvictableIdleTimeMillis:300000
validationQuery:SELECT 'x'
testWhileIdle:true
testOnBorrow:false
testOnReturn:false
maxOpenPreparedStatements:20
removeAbandoned:true
removeAbandonedTimeout:1800
logAbandoned:true

其中maxIdle是为了从dp连接池平滑转过来所特意留下的东西 这个概念很混乱 所以druid没有再使用 

最后差点忘了一点。。配置为1800 就是三十分钟的这个东西 是当持有连接的时间大于30分钟的话 这个连接会被收回 这个地方需要注意 如果你需要一直访问数据库 跑一个项目的时间超过了30分钟 那么就会出错了 所以这个地方需要注意一下


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值