前言

  前面讲过了Javamelody的基本配置如何使用Javamelody来监控JDBC以及SQL。

  这里继续讲解一下如何监控struts和spring。

  手码不易,转载请注明:xingoo

  由于spring的理论并不扎实,监控spring又是依靠sring的面向切面AOP技术来做的,因此在配置的时候虽然参照官方文档,但是仍然无法获得监控数据。这里先说一下简单的struts的监控。

  Struts监控

  Struts的监控相对来说要简单多了,只要按照下面的步骤,肯定是没有问题的。

  第一步,导入必要的jar包,需要的jar包前面已经提到过了。

  一个是javamelody.jar,另一个是jrobin-x.jar

  第二步,需要在web.xml中添加监控对应的过滤器

 <filter>
<filter-name>monitoring</filter-name>
<filter-class>net.bull.javamelody.MonitoringFilter</filter-class> <init-param>
<param-name>log</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>monitoring</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <listener>
<listener-class> net.bull.javamelody.SessionListener</listener-class>
</listener>

  当然不要忘记struts自己的过滤器

 <filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> <init-param>
<param-name>struts.action.extension</param-name>
<param-value>action</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

  第三步,在struts.xml中添加默认的package,这个package提供了默认的拦截器

 <package name= "default" extends ="struts-default,json-default" >
<!-- 向Struts2框架中注册拦截器或者拦截器栈,一般多用于自定义拦截器或拦截器栈的注册 -->
<interceptors>
<interceptor name ="monitoring" class ="net.bull.javamelody.StrutsInterceptor" />
<interceptor-stack name ="myStack" >
<interceptor-ref name ="monitoring" />
<interceptor-ref name ="defaultStack" />
</interceptor-stack>
</interceptors>
<!--设置整个包范围内所有Action所要应用的默认拦截器信息 -->
<default-interceptor-ref name ="myStack" />
</package>

  其他的package比如sttuts的包,都要继承这个default的包。

 <package name="test" extends="default">
<action name="login" class="com.test.LoginAction">
<result name="error">/error.jsp</result>
<result name="success">/success.jsp</result>
</action> <action name="search" class="com.test.SearchAction">
<result name="error">/error.jsp</result>
<result name="success">/searchSuccess.jsp</result>
</action> <action name="hibernatetest" class="com.test.TestHibernate">
<result name="error">/error.jsp</result>
<result name="success">/hibernateSuccess.jsp</result>
</action> </package>

  上面三步,就算是配置完了。

  如果不触发监控事件,比如点击某些东西进行响应跳转,使用struts,那么是监控不到数据的。虽然有显示对应的图片,但是图片上的数据都是0,Nan或者下方的表为空,这些都是没有触发监听事件的原因。

  Spring监控

  JavaMelody针对于spring的监控是到方法级别的,我们可以监控到某个类的某个方法,因此需要使用到AOP里面的pointcut进行监听。

  下面看一下主要的监听配置:

  第一步,依然是导入必备的jar包,上面说的两个,不再重复了。

  第二步,加载monitoring-spring.xml以及我们自己的applicationContext.xml配置文件。

  如果想要在加载web.xml的时候读取spring的配置文件,需要实现一个监听器

 <listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

  然后在web.xml中,添加spring文件路径。通过这只上下文参数来设置

 <context-param>
<param-name> contextConfigLocation</param-name>
<param-value>
classpath:net/bull/javamelody/monitoring-spring.xml
/WEB-INF/classes/bean.xml
</param-value>
</context-param>

  上面第一行,定义了监控应用的spring配置文件,下面是我们自己的spring的配置文件。

  第三步,通过正则表达式,定位方法

 <bean id="facadeMonitoringAdvisor" class="net.bull.javamelody.MonitoringSpringAdvisor">
<property name="pointcut">
<bean class="org.springframework.aop.support.JdkRegexpMethodPointcut">
<property name="pattern" value="com.test.*.*" />
</bean>
</property>
</bean>

  这里面主要是使用了JdkRegexpMethodPointcut,也就是正则表达式定位业务方法。下面的参数可能是pattern或者patterns,参数

    com.test.*.* 意思是对应com.test包下的所有类的所有方法

    com.test.*.doGet 意思是对应com.test包下所有类的叫doGet的方法

    .*Test.* 意思是所有以Test结尾的类的所有方法

  具体的配置详情,还需要去学习一下AOP中关于切入点pointcut的使用。如果不会的话,多看一下相关的知识吧。

  然后就是针对想要监控的bean,添加这个拦截器:

 <bean id="ProxyFactoryBean" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target">
<ref bean="Computer" />
</property>
<property name="interceptorNames">
<list>
<value>facadeMonitoringAdvisor</value>
</list>
</property>
</bean>

  这样在使用ProxyFactoryBean的时候,就会自动调用拦截器interceptorNames,定位到facadeMonitoringAdvisor中的方法,并在方法前后出发net.bull.javamelody.MonitoringSpringAdvisor,进行信息的监控。

  相应切面的编程代码这里也直接附上,有兴趣的可以运行试验下,主要是理解这个思想,就可以监控自己感兴趣的业务了。

 people.java
public class People{
// 讲话
public void speak() {
System.out.println("Hello,我是People!");
}
// 跑步
public void Running() {
System.out.println("我在跑……跑…………逃……");
}
// 恋爱
public void Loving() {
System.out.println("我在和MM恋爱……别来打搅我!");
}
// 死亡
public void died() {
System.out.println("完了,我死了");
}
} advice类
public class LogerPeople implements MethodBeforeAdvice { public void before(Method method, Object[] args, Object target)
throws Throwable {
System.out.println(target.getClass().getSimpleName() + "正在" +
method.getName()+ "!");
System.out.println("before!________________"); }
} TestMain
public class TestMain { public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext(
"bean1.xml"); //通过ProxyFactoryBean获取IComputer接口实现类的实例
People c = (People) ac.getBean("ProxyFactoryBean");
c.speak();
c.Running();
c.Loving();
c.died();
}
} spring配置文件
<bean id="Computer" class="com.test.People"></bean>
<bean id="LogerComputer" class="com.test.LogerPeople" /> <bean id="ProxyFactoryBean" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target">
<ref bean="Computer" />
</property>
<property name="interceptorNames">
<list>
<value>DefaultAdvisor</value>
</list>
</property>
</bean> <bean id="DefaultAdvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor">
<property name="pointcut" ref="JdkRegexpPointcut" />
<property name="advice" ref="LogerComputer" />
</bean>
<bean id="JdkRegexpPointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut">
<property name="patterns">
<list>
<value>.*spea.*</value>
<value>.*ing</value>
<value>.*di.*</value>
</list>
</property>
<property name="excludedPattern" value=".*Run.*" />
</bean>

  

  我捣鼓了一天半的时间,一直都监控不到数据,就是因为虽然配置了默认的拦截器,但是一直都没有对拦截器进行触发响应。因此一直都没有调用到这个监控类,也就当然没有监控信息出现了。

  总结起来,还是因为没有理解spring AOP的原理,以后会补上spring的相关学习。

JavaMelody监控spring、struts的更多相关文章

  1. 使用javamelody监控springboot项目

    JavaMelody是用来在QA和实际运行生产环境中监控Java或Java EE应用程序服务器的一个开源框架.它不是一个工具来模拟来自用户的请求,而是一个测量和计算用户在实际操作中应用程序的使用情况的 ...

  2. javaMelody监控javaWeb程序性能

    JavaMelody应用监控使用指南 原文:<JavaMelody应用监控使用指南> 前言 本文参考JavaMelody的UserGuide编写,部分文字均来自文档,添加有个人理解.并进行 ...

  3. Spring+Struts集成(第二种方案)

    在上一篇文章中我们了解到了第一种Spring跟Struts集成的方案,但此集成方案的不足是WEB层中知道Spring的相关内容,因为需要去主动的查找对象:BeanFactory.方案二便是通过依赖注入 ...

  4. SpringCloud(8)微服务监控Spring Boot Admin

    1.简介 Spring Boot Admin 是一个管理和监控Spring Boot 应用程序的开源软件.Spring Boot Admin 分为 Server 端和 Client 端,Spring ...

  5. spring boot 2.0.3+spring cloud (Finchley)8、微服务监控Spring Boot Admin

    参考:Spring Boot Admin 2.0 上手 Spring Boot Admin 用于管理和监控一个或多个Spring Boot程序,在 Spring Boot Actuator 的基础上提 ...

  6. Spring Boot (九): 微服务应用监控 Spring Boot Actuator 详解

    1. 引言 在当前的微服务架构方式下,我们会有很多的服务部署在不同的机器上,相互是通过服务调用的方式进行交互,一个完整的业务流程中间会经过很多个微服务的处理和传递,那么,如何能知道每个服务的健康状况就 ...

  7. Spring Boot (十): Spring Boot Admin 监控 Spring Boot 应用

    Spring Boot (十): Spring Boot Admin 监控 Spring Boot 应用 1. 引言 在上一篇文章<Spring Boot (九): 微服务应用监控 Spring ...

  8. JavaMelody监控SQL

    前言 前面讲过了Javamelody的基本配置,这里简单的介绍下,如何使用Javamelody来监控JDBC以及SQL. 手码不易,转载请注明:xingoo 在网上搜索很多资料,仅有开源社区上的两篇帖 ...

  9. Spring+Struts+Ibatis的配置

    指定Spring配置文件位置 <context-param> <param-name>contextConfigLocation</param-name> < ...

随机推荐

  1. HDU - 5119 DP

    题意:求异或大于等于m的方案数 j枚举大了会WA..emmm #include<iostream> #include<algorithm> #include<cstdio ...

  2. day_01 python基础 基本数据类型 if条件

    1. python简介 解释型,弱类型,高级开发语言2. 第一个python程序编写   1. 标点符号(英文)   2. 编码格式(utf-8)3.变量   把程序运行产生的中间值储存起来,方便后面 ...

  3. JDK安装以及maven部署

    JDK安装 检查原有JDK rpm -qa|grep jdk 假如原环境安装有JDK,卸载,命令举例: yum -y remove java--openjdk-headless-.b17.el7.x8 ...

  4. 人生苦短,我用pycharm

    一.安装 1.首先到官网上下载正版,然后点击安装,只需要更改下面一个地方即可 2.激活码或者帐号的话,可以去百度搜,也可以去某宝买,也就3块钱(一年),不建议使用破解版,如果你真的差这三块钱的话,你还 ...

  5. ecmall模板编辑中的标题如何自定义读取

    碰见了一个问题,刚上线的ecmall项目.客户说标题不要商城首页这四个字. 我去源码里找,找了半天才找到. 问题描述如下: 找到title的最原始模板themes\mall\tmall\top.htm ...

  6. vue中使用对非表单元素使用contenteditable的问题

    先说下问题,再上解决方案: span编辑时有多余空格和回车会影响样式(我用的是span便以此为例) 代码:(有换行符) 效果图: 代码:(无换行符) 效果图: 当在span标签的contentedit ...

  7. redis安装配置远程连接

    一.安装redis linux上直接yum安装 yum install redis windows版本下载地址 https://github.com/ServiceStack/redis-window ...

  8. 安装cloudermanager时出现org.spingframework.web.bind.***** host[] is not present at AnnotationMethodHandlerAdapter.java line 738 ****错误(图文详解)(博主推荐)

    不多说,直接上干货! 首先,这个问题,写给需要帮助的朋友们,本人在此,搜索资料近半天,才得以解决.看过国内和国外,资料甚少.特此,写此博客,为了弥补此错误解决的资料少的缘故! 问题详解  解决办法   ...

  9. 在ZYNQ-7000平台上利用PS点亮PL上的LED灯

    在ZYNQ-7000平台上利用PS点亮PL上的LED灯 1.实验方案 图1    实验方案系统框图 2.具体步骤 2.1.vivado工程建立 ①打开vivado集成开发环境,点击“Create Pr ...

  10. 深入理解jQuery插件开发【转】

    如果你看到这篇文章,我确信你毫无疑问会认为jQuery是一个使用简便的库.jQuery可能使用起来很简单,但是它仍然有一些奇怪的地方,对它基本功能和概念不熟悉的人可能会难以掌握.但是不用担心,我下面已 ...