Java yammer@定时将值保留为零

Java yammer@定时将值保留为零,java,spring,annotations,metrics,yammer,Java,Spring,Annotations,Metrics,Yammer,这是我使用yammer计时注释(如上所述)的后续工作 我的spring上下文文件只是: <metrics:annotation-driven /> 我使用mvn clean tomcat7在本地运行我的应用程序:运行,然后连接jconsole 在MBeans选项卡中,我可以看到一个条目,其包名为myGetSessionServletclass,包含三个子文件夹doGet(用于@Metered Number)、get session和get session failures 但是,无

这是我使用yammer计时注释(如上所述)的后续工作

我的spring上下文文件只是:

<metrics:annotation-driven />
我使用mvn clean tomcat7在本地运行我的应用程序:运行,然后连接jconsole

在MBeans选项卡中,我可以看到一个条目,其包名为my
GetSessionServlet
class,包含三个子文件夹
doGet
(用于@Metered Number)、get session和get session failures


但是,无论我调用servlet多少次,上面子文件夹中的所有值都保持为零。我错过了什么?此外,任何关于这些计量指标的文档,如果能提供比标准更详细的信息,我们都将不胜感激。

我发布了一个类似的问题,没有得到更多进一步的信息。 有人向我指出,我可能得到了0个数字,因为“当从类本身调用带注释的方法时,Spring无法截获该方法。”虽然我以前读过该评论,但我没有意识到我处于这种情况,但查看HttpServlet的源代码,我确实看到像doHead这样的方法调用doGet

尽管这一限制本身就是一个挫折,但我继续从我的doGet调用另一个类中的一个方法,看看我是否能够以这种方式执行计时(虽然很麻烦,但愿意尝试一下):

但是,从我的servlet getter调用此方法如下:

public void doGet(final HttpServletRequest req,
      final HttpServletResponse resp) throws ServletException, IOException {

  final Delay delay = new Delay().time();
仍然没有为Delay.time方法显示任何非空数字,无论我执行多少次get

在这一点上,我将采取挑衅性的立场,因为这些注释有任何限制,并且缺乏完整的文档和有用的代码示例,这些注释没有用处,至少在计时servlet的上下文中是这样的。


我真的希望被证明是错误的,我很乐意改变我的投票,接受另一个答案,因为这些注释看起来很有希望,比Metrics.newTimer和类似的方法更实用

我想我成功了

我注意到的第一件事是示例spring上下文文件的schemaLocation属性中的URI: 返回404错误

我在谷歌上搜索了这个问题,看看是否有人抱怨该模式无法访问,并找到了这个线程github.com/codahale/metrics/issues/322,其中一个用户评论说metrics spring模块已从核心度量存储库中删除,并移动到:github.com/ryanteney/metrics-spring

按照该网站上的示例,我从pom中剥离了旧的度量spring依赖项,并添加了以下内容:

  <dependency>
      <groupId>com.ryantenney.metrics</groupId>
      <artifactId>metrics-spring</artifactId>
      <version>2.1.4</version>
  </dependency>
然后我启动了我的网络应用。。。。sax解析器解析spring context.xml文件时出错

似乎www.ryanteney.com/schema/metrics/metrics.xsd 404s也是如此

解决方法很简单,但是,我从github存储库下载了xsd:

然后在我的maven项目的src/main/resources/META-INF目录中添加了以下文件:

META-INF/
    - spring.schemas
    - xsd/
         - metrics.xsd
其中metrics.xsd是从github下载的xsd文件,spring.schemas是包含以下内容的文本文件:

http\://www.ryantenney.com/schema/metrics/metrics.xsd=META-INF/xsd/metrics.xsd
spring在启动时读取spring.schemas文件,并告诉它从本地文件中下拉xsd

通过以上步骤,我能够成功地启动我的应用程序并点击使用服务方法的端点

观察控制台时,我确实每10秒看到以下内容:

com.sample.service.MyServiceClass:
doService:
    count = 8
    mean rate = 0.27 calls/s
    1-minute rate = 0.23 calls/s
    5-minute rate = 0.21 calls/s
    15-minute rate = 0.20 calls/s
    min = 0.13ms
    max = 19.59ms
    mean = 2.59ms
    stddev = 6.87ms
    median = 0.18ms

metrics-spring.jar中包含spring.schemas文件,但如果您使用maven shade插件,则需要使用AppendingTransformer来告诉shade连接(而不是覆盖)spring.schemas文件(请参阅:)我也有同样的问题,并验证了我拥有您描述的内容。我正在使用最新的3.0.3。我的console reporter正在工作,但它只打印所有零。没有记录任何错误或任何东西。还有什么你没提到的吗?感谢如果您执行
newdelay()
,则该对象不属于Spring生命周期的一部分,因此metrics Spring永远没有机会拦截方法调用。如果你没有说我的项目没有用,我将不胜感激,因为问题仅仅是对Spring核心概念的一个根本性误解。@Ryanteney如果我冒犯了你,我很抱歉,最真诚地感谢你所开发的。我认为我在给出判断的背景时非常具体。我还坦率地说,我很高兴被证明是错的,我确实改变了我的投票,以支持这个答案,这个答案显示了一种使这一点起作用的方式。尽管如此,我发现我遇到的问题没有文档记录,我在这里得到的唯一(也是非常好的)答案适合于两页的解释,这似乎仍然与该工具的有用性有关。我并没有说或者说这个项目是无用的,远非如此。@Lolo你成功地使它工作了吗?我在我的宠物项目中也有类似的情况…@Parobay我已经很久没有接触过这个项目了,所以我对它不再陌生,但我的回忆是,我能够按照stroisi所描述的方式使它工作,我接受了这个答案。我希望这能有所帮助。@Ryanteney-我有一个单元测试工作正常,但不能在SpringMVC控制器中工作。我也厌倦了在我找到的谷歌群上发帖。我将感谢任何帮助。
<metrics:annotation-driven proxy-target-class="true" />
@PostConstruct
public void init() {
    ConsoleReporter.enable(10, TimeUnit.SECONDS);    
} 

@Timed
public void doService(...) {
    .... do stuff ....
}
META-INF/
    - spring.schemas
    - xsd/
         - metrics.xsd
http\://www.ryantenney.com/schema/metrics/metrics.xsd=META-INF/xsd/metrics.xsd
com.sample.service.MyServiceClass:
doService:
    count = 8
    mean rate = 0.27 calls/s
    1-minute rate = 0.23 calls/s
    5-minute rate = 0.21 calls/s
    15-minute rate = 0.20 calls/s
    min = 0.13ms
    max = 19.59ms
    mean = 2.59ms
    stddev = 6.87ms
    median = 0.18ms