JavaMelody监控spring、struts

前言

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

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

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

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

  Struts监控

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

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

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

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

 1 <filter>
 2   <filter-name>monitoring</filter-name>
 3   <filter-class>net.bull.javamelody.MonitoringFilter</filter-class>
 4
 5   <init-param>
 6    <param-name>log</param-name>
 7    <param-value>true</param-value>
 8   </init-param>
 9  </filter>
10  <filter-mapping>
11   <filter-name>monitoring</filter-name>
12   <url-pattern>/*</url-pattern>
13  </filter-mapping>
14
15 <listener>
16   <listener-class> net.bull.javamelody.SessionListener</listener-class>
17  </listener>

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

 1 <filter>
 2    <filter-name>struts</filter-name>
 3    <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
 4
 5    <init-param>
 6     <param-name>struts.action.extension</param-name>
 7     <param-value>action</param-value>
 8    </init-param>
 9    </filter>
10   <filter-mapping>
11    <filter-name>struts</filter-name>
12    <url-pattern>/*</url-pattern>
13   </filter-mapping>

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

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

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

 1 <package name="test" extends="default">
 2         <action name="login" class="com.test.LoginAction">
 3             <result name="error">/error.jsp</result>
 4             <result name="success">/success.jsp</result>
 5         </action>
 6
 7         <action name="search" class="com.test.SearchAction">
 8             <result name="error">/error.jsp</result>
 9             <result name="success">/searchSuccess.jsp</result>
10         </action>
11
12         <action name="hibernatetest" class="com.test.TestHibernate">
13             <result name="error">/error.jsp</result>
14             <result name="success">/hibernateSuccess.jsp</result>
15         </action>
16
17     </package>

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

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

  Spring监控

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

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

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

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

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

1 <listener>
2         <listener-class>
3             org.springframework.web.context.ContextLoaderListener
4         </listener-class>
5     </listener>

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

1 <context-param>
2   <param-name> contextConfigLocation</param-name>
3              <param-value>
4                   classpath:net/bull/javamelody/monitoring-spring.xml
5                   /WEB-INF/classes/bean.xml
6              </param-value>
7  </context-param>

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

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

1 <bean id="facadeMonitoringAdvisor" class="net.bull.javamelody.MonitoringSpringAdvisor">
2   <property name="pointcut">
3    <bean class="org.springframework.aop.support.JdkRegexpMethodPointcut">
4     <property name="pattern" value="com.test.*.*" />
5    </bean>
6   </property>
7  </bean>

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

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

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

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

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

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

 1 <bean id="ProxyFactoryBean" class="org.springframework.aop.framework.ProxyFactoryBean">
 2   <property name="target">
 3    <ref bean="Computer" />
 4   </property>
 5   <property name="interceptorNames">
 6    <list>
 7     <value>facadeMonitoringAdvisor</value>
 8    </list>
 9   </property>
10  </bean>

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

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

 1 people.java
 2 public class People{
 3     // 讲话
 4      public void speak() {
 5          System.out.println("Hello,我是People!");
 6      }
 7      // 跑步
 8      public void Running() {
 9          System.out.println("我在跑……跑…………逃……");
10      }
11      // 恋爱
12      public void Loving() {
13         System.out.println("我在和MM恋爱……别来打搅我!");
14      }
15     // 死亡
16      public void died() {
17          System.out.println("完了,我死了");
18      }
19  }
20
21 advice类
22 public class LogerPeople implements MethodBeforeAdvice {
23
24  public void before(Method method, Object[] args, Object target)
25    throws Throwable {
26   System.out.println(target.getClass().getSimpleName() + "正在" +
27  method.getName()+ "!");
28   System.out.println("before!________________");
29
30  }
31 }
32
33 TestMain
34 public class TestMain {
35
36     public static void main(String[] args) {
37         ApplicationContext ac = new ClassPathXmlApplicationContext(
38                 "bean1.xml");
39
40         //通过ProxyFactoryBean获取IComputer接口实现类的实例
41         People c = (People) ac.getBean("ProxyFactoryBean");
42         c.speak();
43         c.Running();
44         c.Loving();
45         c.died();
46     }
47 }
48
49
50 spring配置文件
51 <bean id="Computer" class="com.test.People"></bean>
52  <bean id="LogerComputer" class="com.test.LogerPeople" />
53
54  <bean id="ProxyFactoryBean" class="org.springframework.aop.framework.ProxyFactoryBean">
55   <property name="target">
56    <ref bean="Computer" />
57   </property>
58   <property name="interceptorNames">
59    <list>
60     <value>DefaultAdvisor</value>
61    </list>
62   </property>
63  </bean>
64
65  <bean id="DefaultAdvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor">
66   <property name="pointcut" ref="JdkRegexpPointcut" />
67   <property name="advice" ref="LogerComputer" />
68  </bean>
69  <bean id="JdkRegexpPointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut">
70   <property name="patterns">
71    <list>
72     <value>.*spea.*</value>
73     <value>.*ing</value>
74     <value>.*di.*</value>
75    </list>
76   </property>
77   <property name="excludedPattern" value=".*Run.*" />
78  </bean>

  

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

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

时间: 2024-11-14 17:44:41

JavaMelody监控spring、struts的相关文章

Spring+Struts 2 简单实例报空指针异常

空指针出现于Action注入位置..如果一般错误请检查配置文件. 我出的错误.在于拷贝了之前做的实例中的lib文件夹到这个工程中. 其中有个包为struts2-convention-plugin-2.3.16.3.jar 造成了包识别异常.出现空指针.有类似经历的可以查看,也给大家提个醒.不要一气呵成的导入所有包.容易出现混乱.也不利于大家清楚的认识包和代码的联系. Spring+Struts 2 简单实例报空指针异常,布布扣,bubuko.com

6.Spring+Struts+Hibernat注解方式整合

SSH注解方式实现 1.创建db.properties文件,主要是数据库的连接数据 jdbc.driverClassName=com.mysql.jdbc.Driverjdbc.url=jdbc\:mysql\://localhost\:3306/testjdbc.username=rootjdbc.password=076634 2.创建Struts的配置文件,主要定义struts的常规配置 <?xml version="1.0" encoding="UTF-8&qu

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

在上一篇文章中我们了解到了第一种Spring跟Struts集成的方案,但此集成方案的不足是WEB层中知道Spring的相关内容,因为需要去主动的查找对象:BeanFactory.方案二便是通过依赖注入的方式来进行.通过Spring提供ActionProxy进行代理.去获取BeanFactory,找到Path的名称,然后找到path路径下的Action,然后完成注入. 方案二的核心:Struts的核心交给Spring来创建.Spring跟其他框架集合主要也是通过此种方式. 方案二集成框架图: sp

spring boot 2.0.3+spring cloud (Finchley)7、微服务监控Spring Cloud Admin

参考:Spring Boot Admin 2.0 上手 Spring Boot Admin 用于管理和监控一个或多个Spring Boot程序,在 Spring Boot Actuator 的基础上提供简洁的可视化 WEB UI,提供如下功能: 显示 name/id 和版本号 显示在线状态 Logging 日志级别管理 JMX beans 管理 Threads 会话和线程管理 Trace 应用请求跟踪 应用运行参数信息,如: Java 系统属性 Java 环境变量属性 内存信息 Spring 环

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

1.简介 Spring Boot Admin 是一个管理和监控Spring Boot 应用程序的开源软件.Spring Boot Admin 分为 Server 端和 Client 端,Spring Boot Admin UI部分使用AngularJs将数据展示在前端. 2.工程架构 Eureka Server:服务注册中心,端口为8761. Admin Server:用于对微服务系统进行统一的监控和管理. Admin Clinet:客户端集成Admin. 3.构建Admin Server 新建

JavaMelody监控SQL

前言 前面讲过了Javamelody的基本配置,这里简单的介绍下,如何使用Javamelody来监控JDBC以及SQL. 手码不易,转载请注明:xingoo 在网上搜索很多资料,仅有开源社区上的两篇帖子有点帮助,但对于监控SQL还是有很多问题,有不少的网友遇到了跟我同样的问题,监控页面打开可就是监控不到数据,SQL一栏无论如何都是0,要不就是NaN. 这个问题其实还是因为数据源的部分没有配置正确,这里介绍两种配置的方式. 第一种,直接配置数据源,添加额外的jdbc驱动 按照UserGuide的文

5.Spring+Struts+Hibernate配置文件整合

一:配置文件整合SSH 1.创建Hibernate实体类的映射文件,一般在resource下建文件夹下放置 <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hiber

spring+struts+hibernate项目配置

applicationContext.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:context="http://www.

Spring+Struts+Hibernate 简介(转)

http://blog.csdn.net/slnqnd/article/details/1772910/ Struts2.0 +Hibernate 3.2 +Spring 2.0 一.        Struts 1.定义 它是使用 servlet 和 JavaServer Pages 技术的一种 Model-View-Controller 实现, 可帮助您控制Web 项目中的变化并提高专业化水平.“模型-视图-控制 器”(MVC) 就是用来帮助您控制变化的一种设计模式.MVC 减弱了业务逻辑接