Druid连接池基本配置及监控配置

本文介绍如何配置Druid数据库连接池并监控慢SQL。通过详细配置示例,展示如何设置连接池参数、启用慢SQL记录及配置监控统计拦截器。此外,还介绍了如何在web.xml中配置servlet和过滤器,以便实现对Druid控制台的访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.配置Druid连接池,监控慢sql

<!-- 数据源配置, 使用 Druid 数据库连接池 -->
    <bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <property name="url" value="${jdbc_url}" />
        <property name="username" value="${jdbc_username}" />
        <property name="password" value="${jdbc_password}" />
        <!-- 配置初始化大小、最小、最大 -->
        <property name="initialSize" value="0" />
        <property name="minIdle" value="0" />
        <property name="maxActive" value="20" />
        <!-- 配置获取连接等待超时的时间 -->
        <property name="maxWait" value="60000" />
        <!-- 这里建议配置为TRUE,防止取到的连接不可用。获取链接的时候,不校验是否可用,开启会有损性能-->
        <property name="testOnBorrow" value="true" />
        <!-- 归还链接到连接池的时候校验链接是否可用 -->
        <property name="testOnReturn" value="false" />
        <!-- 此项配置为true即可,不影响性能,并且保证安全性。意义为:申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效 -->
        <property name="testWhileIdle" value="true" />
        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位毫秒,可以有效解决异常错误:Software caused connection abort: socket write error -->
        <property name="timeBetweenEvictionRunsMillis" value="60000" />
        <!-- 配置一个连接在池中最小生存的时间,单位毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="300000" />
        <!-- 链接使用超过时间限制是否回收 -->
        <property name="removeAbandoned" value="true" />
        <!-- 超过时间限制时间(单位秒),目前为5分钟,如果有业务处理时间超过5分钟,可以适当调整。 -->
        <property name="removeAbandonedTimeout" value="300" />
        <!-- #链接回收的时候控制台打印信息,测试环境可以加上true,线上环境false。会影响性能。 -->
        <property name="logAbandoned" value="true" />
        <!-- 验证连接有效与否的SQL,不同的数据配置不同 -->
          <property name="validationQuery" value="select 1 " />
          <!-- 配置监控统计拦截的filters,用于在界面中统计sql和开启druid防火墙。注意: -->
        <!-- 监控中有jdbcSqlStat,原因是:com.alibaba.druid.statJdbcDataSourceStat中的createSqlStat方法中,
            用了一个map来存放所有的sql语句,这样会导致线上触发FullGC,可将此处注释掉 -->
        <property name="filters" value="wall,stat" /><!--通过别名的方式配置扩展插件,常用的插件有: 
监控统计用的filter:stat,日志用的filter:log4j,防御sql注入的filter:wall-->
        <!-- 映射慢sql -->
         <property name="proxyFilters">
            <list>
                <ref bean="statfilter"/>
                <ref bean="logFilter"/>
            </list>
        </property>
    </bean>
    <!-- 慢SQL记录  -->
    <bean id="statfilter" class="com.alibaba.druid.filter.stat.StatFilter">
        <!-- 开启合并sql -->
        <property name="mergeSql" value="true" />
        <!-- 开启慢查询语句,200毫秒 -->
        <property name="slowSqlMillis" value="200" />
        <property name="logSlowSql" value="true" />
    </bean>
    
    <bean id="logFilter" class="com.alibaba.druid.filter.logging.Log4jFilter">
        <property name="resultSetLogEnabled" value="false" />
        <property name="statementExecutableSqlLogEnable" value="true" />

    </bean>

2.web.xml中配置servlet和过滤器
<servlet>
        <servlet-name>DruidStatView</servlet-name>
        <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
        <init-param>
            <!-- 允许清空统计数据 -->
            <param-name>resetEnable</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <!-- 用户名 -->
            <param-name>loginUsername</param-name>
            <param-value>druid</param-value>
        </init-param>
        <init-param>
            <!-- 密码 -->
            <param-name>loginPassword</param-name>
            <param-value>druid</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>DruidStatView</servlet-name>
        <url-pattern>/druid/*</url-pattern>
    </servlet-mapping>
    <filter>
        <filter-name>druidWebStatFilter</filter-name>
        <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
        <init-param>
            <param-name>exclusions</param-name>
            <param-value>/public/*,*.js,*.css,/druid*,*.jsp,*.swf</param-value>
        </init-param>
        <init-param>
            <param-name>principalSessionName</param-name>
            <param-value>sessionInfo</param-value>
        </init-param>
        <init-param>
            <param-name>profileEnable</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>druidWebStatFilter</filter-name>
        <url-pattern>/*</url-pattern>

    </filter-mapping>

3.访问控制台

通过日志文件来查看哪一条sql属于慢SQL,从而进行优化。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值