SSM从零开始搭框架(五)

这篇博客就带大家整合druid

其实druid的使用, 在GitHub上非常全,不过还是直接带大家来看看我们项目中具体的使用情况吧:

druid是什么

数据库连接池,能够提供强大的监控和扩展能力, 我们在线上最开始监控sql的时候,就是用druid来看的

由于我们所有项目的一个公共的管理jar的版本的地方:kwy-parent(这里如果忘记结构了,可以回过去看一下这篇博客: SSM从零开始搭框架(一)). 所以需要在这个里面,添加上jar以及jar的版本

<druid.version>1.1.9</druid.version>
<dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>${druid.version}</version>
</dependency>

service的pom文件添加内容

<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>druid</artifactId>
</dependency>

我们使用spring管理druid,在数据库配置文件中datasource.xml中改成druid,还记得我们的目录结构吗?


附上datasource.xml内容:

注意:要使用监控功能,<property name="filters" value="stat" />filters属性要设置为stat。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd">

    <!--spring用来控制业务逻辑,数据源,事务控制,aop-->
    <!--<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">-->

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init"
          destroy-method="close">
        <!--基本属性url user password-->
        <!--<property name="driverClass" value="${jdbc.driver}"></property>-->
        <property name="url" value="${jdbc_url}"/>
        <property name="username" value="${jdbc_username}"/>
        <property name="password" value="${jdbc_password}"/>

        <!--配置初始化大小,最大,最小-->
        <property name="initialSize" value="${jdbc_initialSize}"/>
        <property name="maxActive" value="${jdbc_maxActive}"/>
        <property name="minIdle" value="${jdbc_minIdle}"/>
        <!-- 配置获取连接等待超时的时间 -->
        <property name="maxWait" value="${jdbc_maxWait}"/>
        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="${jdbc_timeBetweenEvictionRunsMillis}"/>
        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="${jdbc_minEvictableIdleTimeMillis}"/>
        <property name="validationQuery" value="${jdbc_validationQuery}"/>
        <property name="testWhileIdle" value="${jdbc_testWhileIdle}"/>
        <property name="testOnBorrow" value="${jdbc_testOnBorrow}"/>
        <property name="testOnReturn" value="${jdbc_testOnReturn}"/>
        <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
        <!--poolPreparedStatements.如果用Oracle,则把poolPreparedStatements配置为true,mysql可以配置为false。分库分表较多的数据库,建议配置为false。-->
        <property name="poolPreparedStatements" value="${jdbc_poolPreparedStatements}"/>
        <property name="maxOpenPreparedStatements" value="${jdbc_maxOpenPreparedStatements}"/>
        <!--配置监控统计拦截的filters-->
        <property name="filters" value="stat"/>
    </bean>

    <!--spring 事务管理-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!--开启基于注解的事务-->
    <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
</beans>

db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://192.168.22.58:8066/401_itoo?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
jdbc_username=root
jdbc_password=root
jdbc_initialSize=8
jdbc_maxActive=200
jdbc_minIdle=8
jdbc_maxWait=8
jdbc_timeBetweenEvictionRunsMillis=6000
jdbc_minEvictableIdleTimeMillis=300000
jdbc_validationQuery=select 'x'
jdbc_testWhileIdle=true
jdbc_testOnBorrow=true
jdbc_testOnReturn=true
jdbc_poolPreparedStatements=true
jdbc_maxOpenPreparedStatements=20
有些可能你会说:都是采取的默认的,还干嘛非要写出来,我觉得好处是这样的: 如果哪天它默认的修改了,如果我们确定了每个值,不会受到其依赖jar包修改而受到影响.


1.使用起步

首先是过滤器filter的配置,在web.xml添加如下配置

1>WebStatFilter用于采集web-jdbc关联监控的数据。

2>exclusions:排除一些不必要的url,如:js等

3>sessionStatMaxCount,缺省值是1000个

4>session统计功能

5>principalSessionName:使druid能够知道当前的session用户是谁

6>profileEnable 能监控单个url调用的sql列表

<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>*.js,*.gif,*.jpg,*.png,*.css,*.ico,*.jsp,/druid/*,/download/*</param-value>
        </init-param>
        <init-param>
            <param-name>sessionStatMaxCount</param-name>
            <param-value>2000</param-value>
        </init-param>
        <init-param>
            <param-name>sessionStatEnable</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>principalSessionName</param-name>
            <param-value>session_user_key</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>

这是最简单的选项配置,选项配置结束后,是监控界面的路径配置了,servlet配置我们将在哪里打开我们的监控页面一级打开页面的时候,输出用户名和密码,在web.xml中添加如下代码:

<!-- 配置 Druid 监控信息显示页面 -->
    <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>dmsd</param-value>
        </init-param>
        <init-param>
            <!-- 密码 -->
            <param-name>loginPassword</param-name>
            <param-value>druid6688</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>DruidStatView</servlet-name>
        <url-pattern>/druid/*</url-pattern>
    </servlet-mapping>
访问service启动地址, url后面添加druid/sql.html,即可看到druid登录页面,将上面的用户名密码登录,就看到监控页面了.

这个只是sql的监控,如果想监控开启spring监控,那么需要在这里进行配置

datasource.xml中添加:

<!-- Druid AOP监控service执行时间 start-->
    <bean id="druid-stat-interceptor" class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor">
    </bean>
    <bean id="druid-stat-pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut" scope="prototype">
        <property name="patterns">
            <list>
                <value>com.tgb.kwy.dubbo.service.*</value>//这里想加其他的,可以继续以value这种格式写
            </list>
        </property>
    </bean>
    <aop:config>
        <aop:advisor advice-ref="druid-stat-interceptor" pointcut-ref="druid-stat-pointcut"/>
    </aop:config>
    <!-- Druid AOP监控service执行时间 end-->

重新启动项目,我们可以看到spring监控里面有东西了


附上官方文档:https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

大家具体一些需要的内容,还是看这个吧~

猜你喜欢

转载自blog.csdn.net/kwy15732621629/article/details/79986321