gpt4 book ai didi

java - Spring Boot JMX ClassNotFoundException

转载 作者:行者123 更新时间:2023-12-01 11:20:20 35 4
gpt4 key购买 nike

我有一些内存存储,我想通过 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

这是我的类,所以我尝试在调用jconsole时配置类路径:

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 添加到类路径中,但打包到其中的依赖库中的所有类仍然不可见。

有什么想法我做错了什么吗?如何在没有 ClassNotFoundException 的情况下查看操作结果?

最佳答案

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

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

关于java - Spring Boot JMX ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31317950/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com