該項目開發(fā)框架采用的druid數(shù)據(jù)源猪瞬,該數(shù)據(jù)源的配置還是非常豐富的,可以監(jiān)控所有執(zhí)行的sql及service操作弥虐。常用配置如下所示:
web.xml增加數(shù)據(jù)源監(jiān)控配置
<!--設(shè)置Druid 數(shù)據(jù)源監(jiān)控 -->
<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,/druid/*</param-value>
</init-param>
<init-param>
<param-name>principalSessionName</param-name>
<param-value>userSession</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>DruidWebStatFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<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>false</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DruidStatView</servlet-name>
<url-pattern>/druid/*</url-pattern>
</servlet-mapping>
這地方定義監(jiān)控哪些請求诚亚,druid也是通過servlet來處理的赖草。
applicationContext.xml配置數(shù)據(jù)源
<bean id="logFilter" class="com.alibaba.druid.filter.logging.Slf4jLogFilter">
<property name="statementExecutableSqlLogEnable" value="true"/>
</bean>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<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="minIdle" value="1"/>
<property name="maxActive" value="${jdbc.maxActive}"/>
<!-- 配置獲取連接等待超時的時間 -->
<property name="maxWait" value="60000"/>
<!-- 配置間隔多久才進行一次檢測,檢測需要關(guān)閉的空閑連接罪郊,單位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000"/>
<!-- 配置一個連接在池中最小生存的時間蠕蚜,單位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="300000"/>
<property name="validationQuery" value="SELECT 'x' from dual"/>
<property name="testWhileIdle" value="true"/>
<property name="testOnBorrow" value="false"/>
<property name="testOnReturn" value="false"/>
<!-- 配置監(jiān)控統(tǒng)計攔截的filters -->
<property name="filters" value="stat"/>
<property name="proxyFilters">
<list>
<ref bean="logFilter"/>
</list>
</property>
</bean>
<!-- druid監(jiān)控-->
<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.critc.*.*.service.*</value>
</list>
</property>
</bean>
<aop:config>
<aop:advisor advice-ref="druid-stat-interceptor" pointcut-ref="druid-stat-pointcut"/>
</aop:config>
這地方定義druid對應(yīng)的log,可以攔截filter等悔橄,這樣系統(tǒng)運行后輸入:http://localhost:8080/druid
可以查看當前的監(jiān)控情況:
數(shù)據(jù)源基本信息:
數(shù)據(jù)源基本信息.png
Sql執(zhí)行情況:
sql執(zhí)行情況.png
Service執(zhí)行情況
service執(zhí)行情況.png
當然如果開發(fā)水平很高的話靶累,完全可以自己開發(fā)一套這樣的監(jiān)控在程序里面。