如果我们搜索我们的 Spring Boot 2.0.3 项目源代码(所有文件),没有提到 nio。
根据 spring 文档,nio 默认是禁用的,所以我们希望不使用 nio。
但是,当应用程序启动时,它会显示“restartedMain org.apache.coyote.http11.Http11NioProtocol [] => 初始化 ProtocolHandler ["http-nio-8080"]"
这是否意味着我们正在使用nio? 如果是这样,文档默认不使用它是否错误?
2024-10-23T09:10:56,001Z INFO restartedMain o.s.b.web.embedded.tomcat.TomcatWebServer [] => Tomcat initialized with port(s): 8080 (http)
2024-10-23T09:10:56,031Z INFO restartedMain org.apache.coyote.http11.Http11NioProtocol [] => Initializing ProtocolHandler ["http-nio-8080"]
2024-10-23T09:10:56,052Z INFO restartedMain org.apache.catalina.core.StandardService [] => Starting service [Tomcat]
2024-10-23T09:10:56,052Z INFO restartedMain org.apache.catalina.core.StandardEngine [] => Starting Servlet Engine: Apache Tomcat/8.5.31
Http11NioProtocol
是 Tomcat 的非阻塞 IO (NIO) 连接器。
Tomcat 8 通常使用 http-nio 协议,除非专门配置为使用阻塞 I/O (BIO) 协议 (Http11Protocol)。因此,即使您没有在项目中显式配置 NIO,Tomcat 本身也会默认使用它。
尝试:
server.tomcat.protocol=org.apache.coyote.http11.Http11Protocol
如果您想放弃 NIO,这将强制使用阻塞 IO 连接器。