JavaMelody - 經常使用配置

一直沒怎麼關注javaMelody這個東西。
本身寫東西的時候想弄點監控,因而把javaMelody裝進去了。
看了文檔幾乎全是法語,在此記錄一些經常使用的配置。 html

首先依賴添加以下:java

<dependency>
    <groupId>net.bull.javamelody</groupId>
    <artifactId>javamelody-core</artifactId>
    <version>1.50.0</version>
</dependency>


說說最基本的配置: net.bull.javamelody.MonitoringFilternet.bull.javamelody.SessionListener
這兩個個必須有, MonitoringFilter用於監控的Servlet Filter,須要聲明在webapp的web.xml中。
而SessionListener是用於監聽HTTP Session的,另外也監聽Servlet Context,須要聲明在webapp的web.xml中。web

/**
 * Filtre de servlet pour le monitoring.
 * C'est la classe de ce filtre qui doit être déclarée dans le fichier web.xml de la webapp.
 * @author Emeric Vernat
 */
public class MonitoringFilter implements Filter{
    //...
}


web.xml中配置以下:spring

<filter>
  <filter-name>monitoring</filter-name>
  <filter-class>net.bull.javamelody.MonitoringFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>monitoring</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
  <listener-class>net.bull.javamelody.SessionListener</listener-class>
</listener>


若是mvc框架使用的是struts,javaMelody提供了net.bull.javamelody.StrutsInterceptor
apache

 

/**
 * Interceptor Struts 2 pour avoir les temps moyens des actions Struts.
 * {@link StrutsInterceptor "http://struts.apache.org/2.1.6/docs/interceptors.html"}
 * @author Emeric Vernat
 */
public final class StrutsInterceptor extends AbstractInterceptor{
    //..
}


集成了AbstractInterceptor,直接放到struts2的interceptor tag裏面reg上就能夠了:mvc

<package name="default" extends="struts-default" >
    <interceptors>
            <interceptor name="monitoring" class="net.bull.javamelody.StrutsInterceptor"/>      
            <interceptor-stack name="myStack">
                    <interceptor-ref name="monitoring"/>
                    <interceptor-ref name="defaultStack"/>
            </interceptor-stack>
    </interceptors>

    <default-interceptor-ref name="myStack"/>
</package>


關於數據源的監控,雖說做者提供了一個net.bull.javamelody.JdbcDriver,但一般會使用dbcp,c3p0什麼的,而後再把它注入到TransactionMananger什麼的來作點事務管理。 app

那就用net.bull.javamelody.SpringDataSourceFactoryBean,把數據源給監控代理作監控了。 好比這樣,只是把聲明好的數據源注入進去:框架

<bean id="mainDataSource" class="net.bull.javamelody.SpringDataSourceFactoryBean">
    <property name="targetName" value="_mainDataSource" />
</bean>


這樣配置後我試着執行了一次SQL,它也的確監控到了。 可是我聲明的net.bull.javamelody.MonitoringSpringAdvisor卻什麼也沒記錄。 webapp

說的就是這個東東: ui

 


關於aop,可使用net.bull.javamelody.MonitoringSpringAdvisor
官網給了三種配置方法,我在這裏也舉個多pointcut栗子:

<bean id="facadeMonitoringAdvisor" class="net.bull.javamelody.MonitoringSpringAdvisor">
    <property name="pointcut">
        <bean class="org.springframework.aop.support.JdkRegexpMethodPointcut">
            <property name="patterns">
                <list>
                    <value>com.xyz.someapp.service.MonitoringPointcut0.*</value>
                    <value>com.xyz.someapp.service.MonitoringPointcut1.*</value>
                    <value>com.xyz.someapp.service.MonitoringPointcut2.*</value>
                </list>
            </property>
        </bean>
    </property>
</bean>


光配置這個是不會生效的。
以前配置數據源的時候官網給出的文檔中說道:若是數據源配置於spring context中,請務必將classpath:net/bull/javamelody/monitoring-spring.xml加入contextConfigLocation中。
但我並無加上,問題是確實監控到了SQL的執行因而沒太關心。
但此次沒監控到spring就要把這個加上了。

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        classpath:net/bull/javamelody/monitoring-spring.xml
        classpath*:/applicationContext*.xml
    </param-value>
</context-param>


那這個monitoring-spring.xml是什麼?
先來看看他的內容:

<?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"
    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">
    <bean id="monitoringAdvisor" class="net.bull.javamelody.MonitoringSpringAdvisor">
        <property name="pointcut">
            <bean class="net.bull.javamelody.MonitoredWithAnnotationPointcut"/>
        </property>
    </bean>
    <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>
    <bean id="springDataSourceBeanPostProcessor" class="net.bull.javamelody.SpringDataSourceBeanPostProcessor">
        <!--
        <property name="excludedDatasources">
            <set>
                <value>excludedDataSourceName</value>
            </set>
        </property>
        -->
    </bean>
    <!--
    <bean id="wrappedDataSource" class="net.bull.javamelody.SpringDataSourceFactoryBean">
        <property name="targetName" value="targetDataSource" />
    </bean>
    -->
</beans>


MonitoringSpringAdvisor繼承了默認的DefaultPointcutAdviso,並在本身的constructor中設置了一個Advice——MonitoringSpringInterceptor以簡化配置。
MonitoredWithAnnotationPointcut則是Pointcut的實現,它讓全部MonitoredWithSpring使用MonitoredWithSpring註解和全部類都經過。


另外定時任務框架我使用的是Quartz, 若是僅僅是Quartz而已,JavaMelody會自動監控,不須要任何配置。
但若是是使用spring scheduling的Quartz JavaMelody提供了...其實它也沒提供什麼。
關鍵是org.springframework.scheduling.quartz.SchedulerFactoryBean中有個exposeSchedulerInRepository,雖然註釋中提到不提倡使用,可是隻要spring版本夠新就沒什麼問題。

監控集成於spring的quartz只須要將該屬性設置爲true(默認爲false)。

而後進monitoring,顯示以下:

相關文章
相關標籤/搜索