首页 > 解决方案 > Spring Boot 为管理服务器自定义 server.tomcat.threads.min-spare

问题描述

我有一个启用了 management.server 的应用程序:

management.server.port=8081

当我开始申请时,我有:

但我想减少 min-spare 仅用于管理(8081)而不是 Web 应用程序(8080)

查看Spring代码,似乎不可能,有人可以确认吗?

标签: javaspring-bootperformancetomcatspring-boot-actuator

解决方案


编辑:下面的方法是不够的,因为ManagementWebServerFactoryCustomizer它也是一个ConfigurableWebServerFactory,因此将应用于主服务器。添加逻辑来检查管理端口并没有帮助,因为管理上下文有自己的布线并且不会拾取 bean。

看起来不可能轻松地连接到管理服务器配置(如果是的话会更容易ServletManagementContextFactorypublic


您可以查看ServletManagementChildContextConfiguration管理服务器的接线方式。

您可以通过提供ManagementWebServerFactoryCustomizer这样的方式连接到管理服务器配置(不确定是否有更简单的方法):

@Configuration
public class TomcatManagementCustomizerConfiguration {
    
    @Bean
    ManagementWebServerFactoryCustomizer<ConfigurableServletWebServerFactory> servletManagementWebServerFactoryCustomizer(
            @Value("${management.server.threads.min-spare:5}") int managementMinSpareThreads,
            ListableBeanFactory beanFactory) {
        return new TomcatManagementCustomizer(beanFactory, managementMinSpareThreads);
    }
    
    static class TomcatManagementCustomizer extends ManagementWebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {
        private final int managementMinSpareThreads;

        protected TomcatManagementCustomizer(ListableBeanFactory beanFactory, int managementMinSpareThreads) {
            super(beanFactory, TomcatWebServerFactoryCustomizer.class);
            this.managementMinSpareThreads = managementMinSpareThreads;
        }

        @Override
        @SuppressWarnings("rawtypes")
        protected void customize(ConfigurableServletWebServerFactory factory, ManagementServerProperties managementServerProperties, ServerProperties serverProperties) {
            super.customize(factory, managementServerProperties, serverProperties);
            ((TomcatServletWebServerFactory) factory).addConnectorCustomizers((connector) -> {
                ProtocolHandler handler = connector.getProtocolHandler();
                if (handler instanceof AbstractProtocol) {
                    AbstractProtocol protocol = (AbstractProtocol) handler;
                    protocol.setMinSpareThreads(managementMinSpareThreads);
                }
            });
        }
    }
}

推荐阅读