[spring-projects/spring-boot]添加Tomcat ProtocolHandlerCustomizer

2024-04-20 502 views
6

你好,这是一个first-timers-only问题。这意味着我们一直在努力让那些以前没有为我们的代码库做出过贡献的人,甚至以前没有为开源做出过贡献的人更容易理解。

如果您就是这样,我们有兴趣帮助您迈出第一步,并可以回答您的问题并为您提供帮助。请注意,我们对自由和开源软件中代表性不足的群体的贡献特别感兴趣!

如果您以前曾贡献过,请考虑将这一贡献留给新人,并查看我们的一般ideal-for-contribution问题。谢谢!

背景

Spring Boot 提供了许多回调接口,可用于定制 Web 服务器。 ATomcatConnectorCustomizer可用于自定义 Tomcat Connector

问题

自定义ProtocolHandler需要Connector创建一个TomcatConnectorCustomizer.从下面的示例可以看出,这有点乏味:

@Bean
public TomcatConnectorCustomizer connectorCustomizer() {
       return (connector) -> { ((AbstractHttp11Protocol<?>) connector
                .getProtocolHandler()).setProcessorCache(250));
       };
}

相反,如果我们添加TomcatProtocolHandlerCustomizer并自动应用这些 bean,则会将配置简化为以下内容:

@Bean
public TomcatProtocolHandlerCustomizer<AbstractHttp11Protocol<?>> processorCacheCustomizer() {
    return (handler) -> handler.setProcessorCache(250);
}
解决方案

添加TomcatProtocolHandlerCustomizer类型。类型的 Bean TomcatProtocolHandlerCustomizer应自动应用于TomcatServletWebServerFactoryTomcatReactiveWebServerFactory。为此,可以在此处TomcatServletWebServerFactory完成此操作,并且可以在此处找到反应式配置。

ObjectProvider接口可用于注入依赖项。下面是一个示例,当有 0..n 个定制器时,可以使用该示例来注入定制器。

servlet 和响应式版本的测试分别位于此处此处

回答

1

我很想尝试一下。

3

我想解决这个问题。

4

@pas2al 这都是你的!如果你有问题,请告诉我们。

@atulkulkarni18 谢谢,如果 @pas2al 由于某种原因无法处理此问题,我们会与您联系。

4

我喜欢这个主意 ?

2

@philwebb @mbhave 好主意!您可以将我添加到等候名单中:-)

6

@philwebb @mbhave 我在候补名单上:)

2

您能否将我列入未来问题修复的等待名单中?

6

@sundarraj4u 抱歉,但这不是它的工作原理。我们没有等候名单,请留意标记为 的未来问题first-timers-only

5

我在设置项目时遇到问题。我确实使用 IntelliJ 中的根目录导入了项目pom.xml,并选择了我想要使用的模块:

  • spring-boot/spring-boot-project/spring-boot
  • spring-boot/spring-boot-project/spring-boot-autoconfigure

之前,我用mvn clean install.由于依赖性问题,一些测试失败了。这是运行整个项目构建时的错误:

[INFO] [ERROR] Failed to execute goal on project spring-boot-sample-oauth2-resource-server: Could not resolve dependencies for project org.springframework.boot:spring-boot-sample-oauth2-resource-server:jar:2.2.0.BUILD-SNAPSHOT: Failed to collect dependencies at com.squareup.okhttp3:mockwebserver:jar:3.9.0 -> com.squareup.okhttp3:okhttp:jar:3.9.0: Failed to read artifact descriptor for com.squareup.okhttp3:okhttp:jar:3.9.0: Could not transfer artifact com.squareup.okhttp3:okhttp:pom:3.9.0 from/to central (https://repo.maven.apache.org/maven2): Connection reset -> [Help 1]

这是日志的其余部分,所有其他模块均成功:

[INFO] Spring Boot Samples Invoker ........................ FAILURE [08:43 min]
[INFO] Spring Boot Tests .................................. SKIPPED
[INFO] Spring Boot Integration Tests ...................... SKIPPED
[INFO] Spring Boot Configuration Processor Tests .......... SKIPPED
[INFO] Spring Boot DevTools Tests ......................... SKIPPED
[INFO] Spring Boot Hibernate 5.2 tests .................... SKIPPED
[INFO] Spring Boot Server Tests ........................... SKIPPED
[INFO] Spring Boot Launch Script Integration Tests 2.2.0.BUILD-SNAPSHOT SKIPPED

spring-boot模块在我的 IDE 中工作正常,但spring-boot-autoconfigure由于依赖性问题而无法编译。它没有找到 Spring 依赖项,甚至没有找到 JUnit。我spring-boot-autoconfigure在 IntelliJ 中重建并重新导入了 Maven 模块。它仍然无法编译。当spring-boot-autoconfigure我运行mvn clean install.你能帮助我吗?

4

@pas2al 请确保您有稳定的互联网连接并且没有代理。另请检查您的settings.xml。您的构建失败,因为它无法下载 com.squareup.okhttp3。干杯

9

我没有任何代理配置或settings.xml(现在没有什么可配置的)。spring-boot-autoconfigure对整个项目运行构建时构建成功(参见上面的日志,该模块包含在成功构建的模块列表中),单独运行时构建成功。但我不明白为什么 IntelliJ 无法找出依赖关系。

9

如果您能够从终端构建整个项目,那么应该没有任何问题。我会首先从终端构建项目,然后重新导入整个项目。

7

是的,应该:-)。我现在在 IntelliJ 中单独导入该项目。我之前导入了多个模块,但不知何故崩溃了。但现在我可以工作了。

1

我想尝试一下。

4

@thaneeshshanand 请在发表评论之前阅读整个帖子。这条评论特别为您提供了一些信息

7

怎么样,@pas2al?如果您有任何疑问,请随时在这里提问,我们将尽力提供帮助。

6

@mbhave 看起来不错。我从实施开始。我将在周末提交一个在制品拉取请求。如果我有疑问,我们可以将该公关作为基础。

6

@mbhave 只是想让你知道我在实施方面正在取得进展。我只需要一些时间来了解细节和测试,以便我可以完成它。预计在接下来的几天内获得 PR。

9

有兴趣在这里工作。

5

@Razi007 感谢您的关注。请在发表评论之前阅读整个线程,@pas2al 已经在处理它了。

6

@mbhave @snicoll PR 现已开放并准备接受审核。我期待您的反馈。我错过了什么?还有更多测试用例吗?

7

结束有利于 PR #16342