• 数据库阿里连接池 Druid配置详解以及web监控统计


      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, 
    是组合关系,并非替换关系

    表1.1 配置属性

    加入 druid-1.0.9.jar

    ApplicationContext.xml

    1. bean name = "transactionManager" class ="org.springframework.jdbc.datasource.DataSourceTransactionManager" >     
    2.     property name = "dataSource" ref = "dataSource" ></ property >  
    3.      </ bean >  
    4.     bean id = "propertyConfigurer" class ="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >    
    5.        property name = "locations" >    
    6.            list >    
    7.                  value > /WEB-INF/classes/dbconfig.properties </ value >    
    8.             </ list >    
    9.         </ property >    
    10.     </ 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

    转载自:https://blog.csdn.net/hj7jay/article/details/51686418

  • 相关阅读:
    二分图最大匹配的K&#246;nig定理及其证明
    HDOJ 2389 Rain on your Parade
    HDOJ 1083 Courses
    HDOJ 2063 过山车
    POJ 1469 COURSES
    UESTC 1817 Complete Building the Houses
    POJ 3464 ACM Computer Factory
    POJ 1459 Power Network
    HDOJ 1532 Drainage Ditches
    HDU 1017 A Mathematical Curiosity
  • 原文地址:https://www.cnblogs.com/Luke-Me/p/8990354.html
Copyright © 2020-2023  润新知