【问题标题】:JMX Spring connect to localhost without specifying the server address and portJMX Spring 连接到 localhost 而不指定服务器地址和端口
【发布时间】:2025-12-04 06:35:01
【问题描述】:

我指的是这里

http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/jmx.html#jmx-proxy

我正在尝试连接到 localhost MBeanServer 并使用 Spring Proxy 执行一些操作。 问题只是指定了 ObjectName 和 ProxyInterface,我无法连接到 localhost。我可以通过指定 MBeanProxyFactoryBean 的 server 属性来解决这个问题。

这是我的春天context.xml

bean id="proxyWithoutServer" class="org.springframework.jmx.access.MBeanProxyFactoryBean"
          p:objectName="com.xxx.yyy"
          p:proxyInterface="com.MyInterface" 

bean id="proxyWithServer" class="org.springframework.jmx.access.MBeanProxyFactoryBean"
          p:objectName="com.xxx.yyy"
          p:proxyInterface="com.MyInterface" 
p:server-ref="clientConnector"

<bean id="clientConnector" class="org.springframework.jmx.support.MBeanServerConnectionFactoryBean"
          p:serviceUrl="service:jmx:rmi://localhost/jndi/rmi://localhost:8001/jmxrmi" />

在 Java 代码中,我只是这样做

MyInterface myInterface = context.getBean("proxyWithoutServer");
myInterface.myMethod();

但这不起作用。 - 说无法连接到本地主机

但是如果我使用

MyInterface myInterface = context.getBean("proxyWithServer");
myInterface.myMethod();

这行得通。

这里的问题是这段代码将在多个服务器上运行,并且每个服务器中的 jmx 端口会不同。所以我不想指定端口号。因此我想 proxyWithoutServer 版本的这个工作。 查看 spring jmx 文档,如果我们尝试连接到本地 MBean 服务器,似乎不需要指定服务器端口。 需要一些关于我在这里做错了什么的建议。

提前致谢

【问题讨论】:

    标签: java spring jmx spring-jmx


    【解决方案1】:

    创建对 MBeanServer 的本地引用。

    <context:mbean-server id="localMBeanServer"/>
    

    然后在 p:server-ref 中使用localMBeanServer

    【讨论】:

    • 试过这个。我收到 InvalidInvocationError。
    • 我刚刚进行了测试,它对我来说效果很好;你一定有一些错误的配置。