java - Spring Boot 为管理服务器自定义 server.tomcat.threads.min-spare
问题描述
我有一个启用了 management.server 的应用程序:
management.server.port=8081
当我开始申请时,我有:
- 10 个线程用于 8080 HTTP nio 连接器
- 8081 HTTP nio 连接器的 10 个线程
但我想减少 min-spare 仅用于管理(8081)而不是 Web 应用程序(8080)
查看Spring代码,似乎不可能,有人可以确认吗?
解决方案
编辑:下面的方法是不够的,因为ManagementWebServerFactoryCustomizer
它也是一个ConfigurableWebServerFactory
,因此将应用于主服务器。添加逻辑来检查管理端口并没有帮助,因为管理上下文有自己的布线并且不会拾取 bean。
看起来不可能轻松地连接到管理服务器配置(如果是的话会更容易ServletManagementContextFactory
)public
。
您可以查看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);
}
});
}
}
}
推荐阅读
- php - Laravel 部署配置
- telegram - 为什么电报群会自动变成超级群?
- rest - 为什么 GET + DELETE 不是幂等的?
- php - 多个 select2 在表单提交时仅返回一个选择
- c# - Xamarin.Forms 中 View 和 ViewModel 之间的通信
- python - 如何找到第一个非零元素和最后一个非零元素并修剪它
- typescript - 我可以一直使用最新版本的 Typescript 吗?
- python - 如何快速读取文件?
- spring - 在 Spring 5 JMS 文档中 DefaultMessageListenerContainer 澄清 Destination Wanted
- javascript - 如何通过检查状态的迭代键来遍历对象数组?