alibaba / jetcache

JetCache is a Java cache framework.
Apache License 2.0
5.09k stars 1.05k forks source link

设置了statIntervalMinutes只能统计该时间区间内的信息 #786

Open myheavyhead opened 1 year ago

myheavyhead commented 1 year ago

版本号:jetcache-core 2.6.5

设置了statIntervalMinutes只能统计该时间区间内的信息,但是我想既统计statIntervalMinutes这个周期内的缓存情况,又想统计整个周期(从jetcache启动到现在)的缓存情况,我该如何配置呢。

查阅了官方手册好像没有看到这种配置方法,使用自定义统计又感觉没有官方的全面和友好。

期待您的回复,谢谢。

areyouok commented 1 year ago

没有这个支持。不过metrics相关的需求很容易定制。

你提供的ConfigProvider覆盖一下,覆盖metricsMonitorInstaller方法,看一下代码,然后按自己的需求定制,扩展点很多的。

按你的要求,要给cache安装两个monitor,一个定期重置,一个不重置。

myheavyhead commented 1 year ago

好的,我现在试试,谢谢

myheavyhead commented 1 year ago

@areyouok 您好,请问如何实现自己的CacheMonitor呢,我看网上的资料说可以实现CacheMonitor接口,如何将其指定给缓存这样就可以自定义统计各类信息了,但是我发现该接口目前就一个方法了。

myheavyhead commented 1 year ago

@areyouok 你好,我在我的代码里面,定义了一个StatInfoLogger的子类,类似下面这样

`@Service public class MyStatInfoLogger extends StatInfoLogger { public MyStatInfoLogger() { super(true); }

@Override
public void accept(StatInfo statInfo) {
    System.out.println(1);
    System.out.println(2);
}

}`

我想让jetcache打印统计信息时,进入到我自己的accept方法中,我在jetcache-config.yml中进行了如下的配置

jetcache: statIntervalMinutes: 1 stat: logger: com.xxx.MyStatInfoLogger

可实际效果却不尽人意,他并没有进入到我的MyStatInfoLogger 中,因此我也无法自定义统计信息,请问有什么办法可以达到我的目的吗,还是说我的配置不对。

期待您的回复,谢谢。

areyouok commented 1 year ago

你应该提供自己的SpringConfigProvider bean,覆盖metricsMonitorInstaller。

如果是2.6可能是需要提供一个自己的CacheMonitorManager bean。

你需求特殊就需要看下代码,找到扩展点在哪,而不是去网上查找现成的答案。主要的点都在ConfigProvider类里面,这个类是预留了很多扩展的点的。

myheavyhead commented 1 year ago

请问如何扩展自己的SpringConfigProvider 呢,每次启动都报错找不到 'com.alicp.jetcache.anno.support.GlobalCacheConfig' : (,我还需要把JetCacheAutoConfiguration也扩展吗

myheavyhead commented 1 year ago

对了。https://github.com/alibaba/jetcache/blob/master/docs/CN/Stat.md 这个上面说的“如果需要定制输出,可以这样做:” 给出的示例应该是有问题的。

areyouok commented 1 year ago

2.6的JetCacheAutoConfiguration里面定义的SpringConfigProvider有ConditionalOnMissingBean注解,你自己定义一个bean就把它覆盖了。