电光石火-穿越时空电光石火-穿越时空


阿里Druid数据连接池在SSM框架中的配置使用

Druid数据连接池简介

首先可以参考阿里在GitHub给出的一些说明:

  • Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。
  • 性能好,同时自带监控页面,可以实时监控应用的连接池情况以及其中性能差的sql,方便我们找出应用中连接池方面的问题。

Druid是一个JDBC组件,它包括三部分:

  • DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系
  • DruidDataSource 高效可管理的数据库连接池
  • SQLParser

Druid可以做什么

  • 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。
  • 替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。
  • 数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。
  • SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。


    Druid配置


    1.Maven仓库:http://www.mvnrepository.com/artifact/com.alibaba/druid


    2.编写数据库连接的资源文件:dbconfig.properties

  • url:jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8
    driverClassName:com.mysql.jdbc.Driver
    username:root
    password:root
    
    #------------------------------------------------------------------------------------------
    #配置扩展插件 监控统计用filters:stat 日志用filters:log4j 防御sql注入用filters:wall
    filters:stat
    
    #最大连接池数量  初始化建立物理连接的个数  获取连接时最长的等待时间  最小连接池数量  maxIdle已经弃用
    maxActive:20
    initialSize:1
    maxWait:60000
    minIdle:10
    maxIdle:15
    
    #有两个含义 1.Destroy 线程会检测连接的时间 2.testWhileIdle的判断依据
    timeBetweenEvictionRunsMillis:60000
    
    #Destory线程中如果检测到当前连接的最后活跃时间和当前时间的差值大于minEvictableIdleTimeMillis,则关闭当前连接
    minEvictableIdleTimeMillis:300000
    
    #用来检测连接是否的sql,要求是一个查询语句。在mysql中通常设置为SELECT 'X'
    validationQuery:SELECT 'x'
    
    #申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery连接是否有效
    testWhileIdle:true
    
    #申请连接时执行validationQuery检测连接是否有效 这个配置会降低性能
    testOnBorrow:false
    
    #归还连接时执行validationQuery检测连接是否有效 这个配置会降低性能
    testOnReturn:false
    
    #要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true
    maxOpenPreparedStatements:20
    
    #对于建立连接超过removeAbandonedTimeout的连接强制关闭
    removeAbandoned:true
    
    #指定连接建立多长就被强制关闭
    removeAbandonedTimeout:1800
    
    #指定发生removeabandoned时,是否记录当前线程的堆栈信息到日志中
    logAbandoned:true

    3.在Spring配置文件ApplicationContext.xml中加载资源文件进来


    <!--PropertyPlaceholderConfigurer是个bean工厂后置处理器的实现,也就是 BeanFactoryPostProcessor接口的一个实现。PropertyPlaceholderConfigurer可以将上下文(配置文 件)中的属性值放在另一个单独的标准java Properties文件中去。-->
        <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
            <property name="locations">  
                <list>  
                     <value>/WEB-INF/classes/dbconfig.properties</value>  <!--dbconfig.properties 数据库连接信息-->
                </list>  
            </property>  
        </bean> 

    4.在Spring配置文件ApplicationContext.xml中配置阿里数据连接池Druid


    <!-- 阿里 druid数据库连接池 -->
        <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">  
             <!-- 数据库基本信息配置 -->
             <property name="url" value="${url}" />  
             <property name="username" value="${username}" />  
             <property name="password" value="${password}" />  
             <property name="driverClassName" value="${driverClassName}" />
                  <!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 --> 
             <property name="filters" value="${filters}" />  
             <!-- 最大并发连接数 -->
             <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}" />
             <!-- 超过时间限制是否回收 -->
             <property name="removeAbandoned" value="${removeAbandoned}" />
             <!-- 1800秒,也就是30分钟 -->
             <property name="removeAbandonedTimeout" value="${removeAbandonedTimeout}" />
             <!-- 关闭abanded连接时输出错误日志 -->   
             <property name="logAbandoned" value="${logAbandoned}" />
             <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
             <property name="poolPreparedStatements" value="true" />
             <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
        </bean>

    5.在web.xml启用Web监控统计功能


    <!-- 连接池 启用Web监控统计功能   start-->
        <filter>
            <filter-name>DruidWebStatFilter</filter-name>
            <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
            <init-param>
                <param-name>exclusions</param-name> <!-- 经常需要排除一些不必要的url -->
                <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>
        <!-- 展示Druid的统计信息,统计数据源和sql  -->
     <servlet>
        <servlet-name>DruidStatView</servlet-name>
            <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class><!-- 这个StatViewServlet的用途包括:提供监控信息展示的html页面;提供监控信息的JSON API -->
        <init-param>
            <!-- 白名单 -->
            <param-name>allow</param-name>
            <param-value>127.0.0.1</param-value>
        </init-param>
        <init-param>
            <!-- 用户名 -->
            <param-name>loginUsername</param-name>
            <param-value>admin</param-value>
        </init-param>
        <init-param>
            <!-- 密码 -->
            <param-name>loginPassword</param-name>
            <param-value>123456</param-value>
        </init-param>
     </servlet>
     <servlet-mapping>
            <servlet-name>DruidStatView</servlet-name>
            <url-pattern>/druid/*</url-pattern>
        </servlet-mapping>
        <!-- 连接池 启用Web监控统计功能   end-->
    

    6.访问监控页面 http://ip地址:端口号/项目名称/druid/index.html



本博客所有文章如无特别注明均为原创。作者:似水的流年
版权所有:《电光石火-穿越时空》 => 阿里Druid数据连接池在SSM框架中的配置使用
本文地址:http://ilkhome.cn/index.php/archives/266/
欢迎转载!复制或转载请以超链接形式注明,文章为 似水的流年 原创,并注明原文地址 阿里Druid数据连接池在SSM框架中的配置使用,谢谢。

评论