JavaMelody:@net.bull.javamelody.Monitored注解无法展示类/方法统计
JavaMelody CDI Bean监控无统计数据的排查方案
以下是你需要检查的前置条件和排查要点,确保CDI Bean的方法统计能正常收集:
- 确认CDI Bean的注入方式正确:必须通过
@Inject让CDI容器管理Bean实例,绝对不能用new手动创建。JavaMelody依赖CDI生成的代理对象来拦截方法调用,手动实例化的对象不会被监控。 - 验证CDI扩展加载状态:
- 确保项目中JavaMelody的CDI扩展类
net.bull.javamelody.CdiMonitoringExtension能被容器加载。检查META-INF/services/javax.enterprise.inject.spi.Extension文件是否存在,且包含该类的全限定名。 - 查看应用服务器启动日志,确认有该扩展初始化的日志记录,比如
net.bull.javamelody.CdiMonitoringExtension initialized。
- 确保项目中JavaMelody的CDI扩展类
- 检查方法的访问修饰符:被
@Monitored注解的方法必须是public。CDI代理无法拦截private、protected或包级私有方法,自然不会产生统计数据。 - 确认SessionScoped注解正确:使用CDI原生的
javax.enterprise.context.SessionScoped,不要混用其他框架(如JSF)的同名注解。如果注解错误,Bean不会被CDI容器正确管理,监控代理也无法生效。 - 检查beans.xml配置:
- 如果项目中有
beans.xml,确保bean-discovery-mode不是none,否则CDI容器不会发现你的Bean。建议设置为annotated或all。 - 若beans.xml中显式配置了拦截器列表,必须添加JavaMelody的拦截器:
<interceptors> <class>net.bull.javamelody.MonitoringInterceptor</class> </interceptors>
- 如果项目中有
- 确认方法被实际调用:测试时务必调用被注解的方法,且调用的是CDI注入的Bean实例。可以在方法中添加日志,确认方法确实被执行过,再去/monitoring端点查看统计。
- 排查排除规则:检查
javamelody.properties配置文件,确认没有通过excluded-methods或excluded-classes将你的Bean或方法排除在监控之外。临时注释这些配置项测试是否恢复正常。
内容的提问来源于stack exchange,提问作者mabasha
相关产品推荐
相关产品推荐

