我问过一个关于将Spring Boot与Jolokia一起使用的问题:How to connect SpringBoot JMX beans with Jolokia?。最初的问题更多是关于使用类名查找特定工件,但是我还有另一个问题,将其更新为该问题,但是我想为此需要一个新问题。
我有一个Spring Boot应用程序。我正在使用@EnableMBeanExport使具有@ManagedResource的bean可用于JMX服务器。在使用VisualVM的简单本地过程中,此方法可以很好地工作。
我现在想提供Jolokia作为这些MBean的接口。我不清楚我需要添加哪些内容。
https://jolokia.org/reference/html/jmx.html上的文档告诉我添加此内容:
MBeanServer jolokiaServer = JolokiaMBeanServerUtil.getJolokiaMBeanServer();
我将其放在这样的@Configuration类中:
@Bean
public MBeanServer jolokiaMBeanServer() {
return JolokiaMBeanServerUtil.getJolokiaMBeanServer();
}
然后,我按照Jolokia手册中的说明,构造了对REST服务的“ curl”调用,以调用我可以从VisualVM执行的同一JMX方法:
curl 'http://localhost:8080/msapi/actuator/jolokia/exec/JMXDemonstration/assignValueToBeanProperty()/someRandomThing/id/xxx'
此操作失败,并显示以下内容(取消了跟踪):
java.lang.IllegalArgumentException: Invalid object name. Key properties cannot be empty
at org.jolokia.request.JmxRequestFactory.createGetRequest(JmxRequestFactory.java:99)
at org.jolokia.http.HttpRequestHandler.handleGetRequest(HttpRequestHandler.java:79)
更新:
请注意,我具有以下依赖性(以及其他依赖性):
<dependency>
<groupId>org.jolokia</groupId>
<artifactId>jolokia-core</artifactId>
<version>1.6.0</version>
</dependency>
<dependency>
<groupId>org.jolokia</groupId>
<artifactId>jolokia-jmx</artifactId>
<version>1.6.0</version>
</dependency>
<dependency>
<groupId>org.jolokia</groupId>
<artifactId>jolokia-spring</artifactId>
<version>1.6.0</version>
<exclusions>
<exclusion>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
</exclusion>
</exclusions>
</dependency>
我添加了排除项,因为这导致Eclipse无法解析该工件。我认为命令行构建有效,但是在Eclipse中失败了。我不知道将其排除会带来什么影响。