Spring Boot JMX ClassNotFoundException

时间:2015-07-09 12:45:33

标签: java spring groovy jmx

我有一些内存存储空间我想通过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的情况下查看操作结果?

1 个答案:

答案 0 :(得分:1)

如果PageFragment位于生成app.jar的模块中,我就不明白为什么它不起作用;如果它没有,它被放置在 fat <​​/ em> jar的 库中,JConsole没有机会在那里找到它。

话虽如此,所有这些并不重要。我不会用JMX返回任何复杂的对象,例如你的PageFragment。无论如何,JConsole无法在UI中处理自定义对象,因此您无法从那里调用该方法。