Spring 启动 JMX ClassNotFoundException
Spring Boot JMX ClassNotFoundException
我有一些内存存储,我想通过 JMX 公开以监控:
@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
上看到 bean,但是当 storage
非空时我尝试调用该操作,我得到:
ClassNotFoundException: c.i.w.g.p.f.e.PageFragment
这是我的 class,所以我尝试在调用 jconsole
时配置 class 路径:
jconsole -J-Djava.class.path=$JAVA_HOME/lib/jconsole.jar:$JAVA_HOME/lib/tools.jar:/path/to/my/boot/app.jar 2345
这导致 ClassNotFound: GroovyObject
(是的,我使用的是 Groovy)。这意味着尽管我将 Spring Boot JAR 添加到 class 路径,但打包到其中的依赖库中的所有 classes 仍然不可见。
知道我做错了什么吗?没有ClassNotFoundException
s怎么能看到运算结果呢?
如果 PageFragment
在生成 app.jar
的模块中,我不明白为什么它不起作用;如果没有,它被放置在 a 库中 fat jar 并且 JConsole 没有机会在那里找到它。
话虽这么说,但这并不重要。我不会 return 任何复杂的对象,例如您使用 JMX 的那个 PageFragment
。 JConsole 无论如何都无法处理 UI 中的自定义对象,因此您不会从那里调用该方法获得任何好处。
我有一些内存存储,我想通过 JMX 公开以监控:
@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
上看到 bean,但是当 storage
非空时我尝试调用该操作,我得到:
ClassNotFoundException: c.i.w.g.p.f.e.PageFragment
这是我的 class,所以我尝试在调用 jconsole
时配置 class 路径:
jconsole -J-Djava.class.path=$JAVA_HOME/lib/jconsole.jar:$JAVA_HOME/lib/tools.jar:/path/to/my/boot/app.jar 2345
这导致 ClassNotFound: GroovyObject
(是的,我使用的是 Groovy)。这意味着尽管我将 Spring Boot JAR 添加到 class 路径,但打包到其中的依赖库中的所有 classes 仍然不可见。
知道我做错了什么吗?没有ClassNotFoundException
s怎么能看到运算结果呢?
如果 PageFragment
在生成 app.jar
的模块中,我不明白为什么它不起作用;如果没有,它被放置在 a 库中 fat jar 并且 JConsole 没有机会在那里找到它。
话虽这么说,但这并不重要。我不会 return 任何复杂的对象,例如您使用 JMX 的那个 PageFragment
。 JConsole 无论如何都无法处理 UI 中的自定义对象,因此您不会从那里调用该方法获得任何好处。