一直没怎么关注javaMelody这个东西。
本身写东西的时候想弄点监控,因而把javaMelody装进去了。
看了文档几乎全是法语,在此记录一些经常使用的配置。 html
首先依赖添加以下:java
<dependency> <groupId>net.bull.javamelody</groupId> <artifactId>javamelody-core</artifactId> <version>1.50.0</version> </dependency>
说说最基本的配置: net.bull.javamelody.MonitoringFilter
和net.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,显示以下: