如果我们搜索我们的spring boot 2.0.3项目源代码(所有文件),没有提到nio。
根据spring 文档,nio 默认是禁用的,所以我们预计不会使用 nio。
但是,当应用程序启动时,它会显示“restartedMain org.apache.coyote.http11.Http11NioProtocol [] => Initializing 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 本身也会默认使用它。
尝试:
如果您想摆脱 NIO,这将强制使用阻塞 IO 连接器。