根据java.jmx文档
-------------------------
clojure.java.jmx/with-connection
([opts & body])
宏定义
使用基于 opts 创建的 JMX 连接执行该语句。opts 可以包括 [default]
:protocol 要使用的协议 [rmi:///jndi/rmi]
:host 要连接的主机 [localhost]
:port 要连接的端口 [3000]
:jndi-path 要使用的 jndi-path [jmxuri]
:url 要使用的完整 URL(作为字符串)而不是从上述选项生成 rmi URL [nil]
上面的选项 [nil]
:environment 用于连接的环境表示的映射。
有关详情,请参阅 JMXConnectorFactory/connect [{}]
描述表明 :url 默认为 'nil',如果不为空,将使用上面的选项。
但是,如果我们使用 :url=nil 和其他选项调用该函数,它仍将使用 nil URL,而忽略其他选项。
=> (jmx/with-connection {:url nil :host "localhost"} (jmx/mbean-names "*:*"))
NullPointerException javax.management.remote.JMXServiceURL.<init> (JMXServiceURL.java:142)
=> (jmx/with-connection {:host "localhost"} (jmx/mbean-names "*:*"))
ConnectException 连接被拒绝 (连接被拒绝) java.net.PlainSocketImpl.socketConnect (PlainSocketImpl.java:-2)
我检查了代码
...
(JMXServiceURL. (:url opts# (jmx-url opts#)))
...
在此,我认为意图是在没有 :url 键或有 :url nil 的情况下回退到 (jmx-url opts#)(文档中也提到)
但实际上,如果没有 opts# 中有 :url => nil,则不会回退。
=> (:url {:url nil :foo "bar"} "fallback")
nil
=> (:url {:foo "bar"} "fallback")
"fallback"