我有一些内存存储空间我想通过JMX公开监控:
lists
我可以在T.append(tuple(e))
上看到bean,但是当@Component
@CompileStatic
@ManagedResource(
objectName = 'bean:name=PageFragmentRepository',
currencyTimeLimit = 15
)
class EmbeddedPageFragmentRepository implements PageFragmentRepository {
private final Map<String, Map<String, PageFragment>> storage = new ConcurrentHashMap<>()
@ManagedOperation(description = 'All fragments')
@Override
List<PageFragment> findAll() {
return storage.values().stream().flatMap { it.values() }.collect(toList())
}
}
非空时我尝试调用该操作,我得到:
jconsole
这是我的类,所以我在调用storage
时尝试配置类路径:
ClassNotFoundException: c.i.w.g.p.f.e.PageFragment
这导致jconsole
(是的,我使用Groovy)。这意味着,尽管我将Spring Boot JAR添加到类路径中,但是依赖库中包含的所有类仍然不可见。
任何想法我做错了什么?如何在没有jconsole -J-Djava.class.path=$JAVA_HOME/lib/jconsole.jar:$JAVA_HOME/lib/tools.jar:/path/to/my/boot/app.jar 2345
s的情况下查看操作结果?
答案 0 :(得分:1)
如果PageFragment
位于生成app.jar
的模块中,我就不明白为什么它不起作用;如果它没有,它被放置在 fat </ em> jar的 库中,JConsole没有机会在那里找到它。
话虽如此,所有这些并不重要。我不会用JMX返回任何复杂的对象,例如你的PageFragment
。无论如何,JConsole无法在UI中处理自定义对象,因此您无法从那里调用该方法。