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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

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

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
5月前
|
Java 数据库连接 Maven
手把手教你如何搭建SSM框架、图书商城系统案例
这篇文章是关于如何搭建SSM框架以及实现一个图书商城系统的详细教程,包括了项目的配置文件整合、依赖管理、项目结构和运行效果展示,并提供了GitHub源码链接。
手把手教你如何搭建SSM框架、图书商城系统案例
|
5月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
5月前
|
Java 数据库连接 Maven
SSM框架整合图书管理项目
这篇文章是关于SSM框架整合到图书管理项目的详细教程,涵盖了从Maven项目构建、依赖导入、数据库连接、配置文件编写、实体类和接口实现到SpringMVC整合的完整步骤。
SSM框架整合图书管理项目
|
4月前
|
XML Java 数据库连接
如何搭建SSM框架、图书商城系统
这是一份详尽的《Spring + SpringMVC + Mybatis 整合指南》,作者耗时良久整理出约五万字的内容,现已经全部笔记公开。此文档详细地介绍了如何搭建与整合SSM框架,具体步骤包括创建Maven项目、添加web骨架、配置pom文件以及整合Spring、SpringMVC和Mybatis等。无论是对初学者还是有一定基础的开发者来说,都是很好的学习资源。此外,作者还提供了项目源码的GitHub链接,方便读者实践。虽然当前主流推荐学习SpringBoot,但了解SSM框架仍然是不可或缺的基础。
80 0
|
5月前
|
Java 应用服务中间件 Maven
Mac使用Idea配置传统SSM项目(非maven项目)
Mac使用Idea配置传统SSM项目(非maven项目)
67 1
|
5月前
|
Java 数据库
使用ssm框架搭建的图书管理系统
本文介绍了使用SSM框架搭建的图书管理系统,包括图书信息管理、借阅记录管理、公告管理、出入库管理以及用户管理等功能。
使用ssm框架搭建的图书管理系统
|
7月前
|
Java
SSM框架Controller层可以做什么
SSM框架Controller层可以做什么
|
7月前
|
存储 Java 关系型数据库
基于SSM框架的电影院售票网站
基于SSM框架的电影院售票网站
基于SSM框架的电影院售票网站
|
7月前
|
前端开发 Java
基于SSM框架的手机商城项目
基于SSM框架的手机商城项目
93 0
|
7月前
|
Java 数据库连接 Spring
杨校老师课堂之Java EE框架SSM所需jar包下载
杨校老师课堂之Java EE框架SSM所需jar包下载
81 0