项目中需要将线程池也监控管理起来。
于是决定引入了hippo4j,这个引入很简单,官方的例子也很简单,拿过来直接跑。
出现问题了,用的和例子一模一样的,也没什么错,但是就是在服务器的管理控制台上没有找到动态的线程池。
先看本地启动的控制台,输出了
从提示上看,根本没有任何动态线程池,我是非常肯定项目中已经有一个官方例子的线程池,并且IOC中肯定是有的(不可能是那种低级错误没扫描到或者没有注册,这个已经排除过)
没办法了,只有翻它的代码了,翻了一下,它的代码应该是在 (spring的扩展点也就那么几个,很容易就能找到)
由此推测是这个没有获取到。
在项目中已经开启了@Async的使用(这里为什么怀疑它就是因为这个新弄的默认线程池是给异步用的),得看一下这块的源码,
这块使用它的代码在这里 (下面是设置)
这本身没什么问题,加载不到的事其实我是知道原因的,其实就是有些情况是BeanPostProcessor处理不了的情况(不清楚的可以看看
,项目的异步这块的加载中导致了它提前初始化,从而hippo4j处理不了,加之我们的线程池本来还需要用TTL包装用于在线程池中作日志追踪用,
本质就是让他延迟初始化,用cglib撸一个简单的,也就是给用
返回一个代理,以推迟加载周期,并且可以定制我们的TTL。
这样问题就愉快地解决了。