[spring-projects/spring-boot]默认禁用 JMX

2024-04-10 673 views
1

此功能似乎没有被广泛使用,并且需要大量资源,因此我们正在重新考虑 2.2 系列的默认设置。

此选项不仅涉及切换spring.jmx.enabled,还涉及检查依赖该选项的其他功能是否不会因此而失败。

回答

6

我想到了 IDE 支持,但如果用户决定使用默认值并且没有该信息,我认为那很好。

8

IntelliJ IDEA 优雅地处理 bean 不存在的事实,但错误消息可以稍微改进。它们还有一个“启用 JMX 代理”选项,可用于设置该属性。我会联系团队。

0

Spring Tools 4 显示启动应用程序实时悬停的功能在很大程度上依赖于可用并启用的 JMX 执行器端点 - 默认情况下启用它们会使这些实时悬停看起来“神奇”,这是一种非常好的用户体验。所以说实话,我不太喜欢将默认设置设置为禁用。

当然,开发人员仍然可以启用该功能,但这会使我们的实时悬停 IDE 功能更难发现。

5

不幸的是,减慢每个人的启动速度也不是一个好的用户体验。鉴于 IDE 工具具有启用 JMX 的方法(Spring Tools 也有一个Enable JMX选项),我相信默认禁用 JMX 并允许那些想要使用它的人启用它是正确的选择。这意味着只有那些想要使用 JMX 的人才需要支付使用成本。

7

我明白你的意思。但从工具的角度来看,情况看起来有所不同。我需要指出的是,在 IDE 中启用此功能可能并不像听起来那么容易,只是为了回到我们目前的状态,工具的此功能只要开箱即用即可使用。您的项目中有执行器。当然,用户可以单击复选框来启用它(在 Spring Tools 4 for Eclipse 中),将该选项添加到启动配置(VSCode、Theia 等)中,或者将其放入环境变量中(对于 CF 上的应用程序),但这一切都会导致这些不同的额外步骤 - 而目前所有这些设置都是开箱即用的。最后,只是两种不同的观点......:-)

看起来归结为一个问题:默认情况下为 X 个人/应用程序(不需要 JMX 访问权限)节省启动时间 vs. 为 Y 个人/应用程序(需要 JMX 访问权限)节省开发人员额外的配置工作时间,对吧?

您是否知道有多少使用执行器端点的人(或应用程序)需要/不需要通过 JMX?

9

这不仅仅是关于执行器。当 Actuator 不在其中时,默认启用 JMX 会产生一定的成本。我们没有任何专门针对 JMX 的数据,但我们可以从现有的数据中做出一些有根据的推论。

从下载量来看,我们知道只有约 33% 的 Boot 用户使用 Actuator。 IMO,仅凭这一点就足以有理由不为了执行器的利益而默认启用 JMX。当我们考虑到并非每个人都会使用依赖于 JMX 的 IDE,或者不会使用其 IDE 中依赖于 JMX 的功能时,这个比例会进一步下降 33%。有趣的是,当用户自己访问 Actuator 时(而不是通过某些工具),我发现他们几乎完全使用 HTTP。我认为考虑到使用curlhttp或浏览器与 JConsole 等相对容易,这是可以预料的。如果更多人使用 JMX,我希望看到更多有关 JSON 响应格式的问题,因为它在这种情况下相当不典型。据我所知,还没有出现过此类问题。

Spring Boot 在类路径上启用功能的模型为我们提供了很好的服务,并且将继续这样做。然而,当应该触发某些功能被启用的东西总是在类路径上时,它会有点下降。 JMX 就属于这一类。我们拥有该spring.jmx.enabled属性,但现在我们意识到它的默认值是错误的。启用 JMX(启动时间和内存使用)的成本太高,默认情况下每个人都无法支付,特别是考虑到几乎可以肯定只有少数用户使用 JMX。

那些需要 JMX 的人可以通过设置轻松启用它spring.jmx.enabled=true,而那些不需要 JMX 的人将获得更快的启动速度和更低的内存使用量。从用户的角度来看,这感觉像是一个双赢的局面。我很高兴这可能会为工具支持带来一些工作。虽然这并不理想,但我不认为这是不改变默认设置的理由。这项工作将是少数人的一次性成本,而大多数 Boot 用户将享受到好处。

1

我同意框架中不应默认启用 JMX。我认为,如果类路径上有执行器,那么启用 JMX 对我来说很有意义(如果可能的话),并且可以满足我们的易用性需求。

2

这在技术上是可行的,但是,除了 DevTools 之外,我们没有任何其他情况可以添加依赖项来更改属性的默认值。制作 Actuator 并spring.jmx.enabled例外会令人困惑。

正如我在上面试图解释的那样,我认为改变每个人或每个使用 Actuator 的人的默认值纯粹是为了满足工具的易用性需求。特别难以证明其合理性,因为工具只是开发方面的问题,但默认值的更改也会影响生产中的应用程序。

当 DevTools 和 Actuator 位于类路径上时,我们可以考虑启用 JMX,但我认为这不会消除对工具适应默认更改的需要。毕竟不是每个人都会使用 DevTools。

3

我将在我们的跟踪器中提出一个问题,以某种方式处理 Boot 2.2 中即将发生的变化。

1

当我将 spring-boot-admin-starter-client 版本升级到 2.7.8 时,jmx 选项在 Spring Boot 管理仪表板上的 jvm 下不可见。我已将 spring.jmx.enabled=true 放入 application.properties 文件中客户应用程序

6

@anandrahul Spring Boot Admin 是一个单独的项目,不由 Spring 团队维护。如果您在升级 Spring Boot Admin 时遇到问题,请联系该团队寻求支持。

8

实现组:'de.codecentric',名称:'spring-boot-admin-starter-client',版本:'2.7.8'。我在客户端应用程序中添加此依赖项以在管理仪表板上注册应用程序,但这里的问题仅在于此依赖项,因为当我将此版本降级到 2.1.2 时,我可以在管理仪表板上看到该应用程序的 jmx,但 jmx 2.7.8 版本不显示。