你的位置:首页 > Java教程

[Java教程]JavaMelody


一直没怎么关注javaMelody这个东西。
自己写东西的时候想弄点监控,于是把javaMelody装进去了。
看了文档几乎全是法语,在此记录一些常用的配置。

首先依赖添加如下:

<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.而SessionListener是用于监听HTTP Session的,另外也监听Servlet Context,需要声明在webapp的web.

/** * Filtre de servlet pour le monitoring. * C'est la classe de ce filtre qui doit être déclarée dans le fichier web.


web.

<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

 

/** * 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上就可以了:

<package name="default" extends="struts-default" >  <interceptors>      <interceptor name="monitoring" />         <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什么的来做点事务管理。

那就用net.bull.javamelody.SpringDataSourceFactoryBean,把数据源给监控代理做监控了。比如这样,只是把声明好的数据源注入进去:

<bean id="mainDataSource" >  <property name="targetName" value="_mainDataSource" /></bean>


这样配置后我试着执行了一次SQL,它也的确监控到了。但是我声明的net.bull.javamelody.MonitoringSpringAdvisor却什么也没记录。

说的就是这个东东:

 


关于aop,可以使用net.bull.javamelody.MonitoringSpringAdvisor
官网给了三种配置方法,我在这里也举个多pointcut栗子:

<bean id="facadeMonitoringAdvisor" >  <property name="pointcut">    <bean >      <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.加入contextConfigLocation中。
但我并没有加上,问题是确实监控到了SQL的执行于是没太关心。
但这次没监控到spring就要把这个加上了。

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


那这个monitoring-spring.先来看看他的内容:

<?


MonitoringSpringAdvisor继承了默认的DefaultPointcutAdviso,并在自己的constructor中设置了一个Advice——MonitoringSpringInterceptor以简化配置。
MonitoredWithAnnotationPointcut则是Pointcut的实现,它让所有MonitoredWithSpring使用MonitoredWithSpring注解和所有类都通过。


另外定时任务框架我使用的是Quartz,如果仅仅是Quartz而已,JavaMelody会自动监控,不需要任何配置。
但如果是使用spring scheduling的QuartzJavaMelody提供了...其实它也没提供什么。
关键是org.springframework.scheduling.quartz.SchedulerFactoryBean中有个exposeSchedulerInRepository,虽然注释中提到不提倡使用,但是只要spring版本够新就没什么问题。

监控集成于spring的quartz只需要将该属性设置为true(默认为false)。

然后进monitoring,显示如下: