Httpl1Nio2Protocol can work with springboot3.0.13, but have exception in v3.1,v3.2,v3.3. exception is: SslStoreProvider can only be used with Http11NioProtocol: org.apache.coyote.httpl1.Httpl1Nio2Protocol use Http11NioProtocol is ok. what 's the reason and solution ?
Comment From: wilkinsona
I'm not sure I understand the question. Can you please provide a minimal example that works with Spring Boot 3.0.x and then fails when upgraded to 3.2.x?
Comment From: automvc
Thanks Wilkinsona. Here is a minimal example. in springboot 3.0.13, Http11Nio2Protocol and Http11NioProtocol can work. But in 3.3.0 just Http11NioProtocol is ok.
@Configuration
public class TomcatConnectorConfig {
// public static final String PROTOCOL = "org.apache.coyote.http11.Http11Nio2Protocol";
public static final String PROTOCOL = "org.apache.coyote.http11.Http11NioProtocol"; //ok in 3.3.0
//... some fields
@Bean
public org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory servletContainer() {
// Create Tomcat Web server factory with pre-defined setting
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
};
tomcat.addAdditionalTomcatConnectors(getHttpConnector());
tomcat.setProtocol(PROTOCOL);
tomcat.addConnectorCustomizers(new TomcatConnectorCustomizer() {
@Override
public void customize(Connector connector) {
ProtocolHandler protocol = connector.getProtocolHandler();
AbstractHttp11Protocol abstractHttp11Protocol = ((AbstractHttp11Protocol) protocol);
abstractHttp11Protocol.setMaxConnections(maxConnection);
abstractHttp11Protocol.setMaxThreads(maxThread);
abstractHttp11Protocol.setMinSpareThreads(minThread);
abstractHttp11Protocol.setKeepAliveTimeout(keepAliveTimeout);
abstractHttp11Protocol.setConnectionTimeout(connectionTimeout);
}
});
return tomcat;
}
private Connector getHttpConnector() {
// Set default http protocol
Connector connector = new Connector(PROTOCOL);
connector.setScheme("http");
connector.setSecure(false);
connector.setPort(443);
connector.setRedirectPort(80);
return connector;
}
}
Comment From: wilkinsona
Thank you. I've reproduced the problem now. All that's necessary is a single connector using Spring Boot-configured SSL and Tomcat configured to use its HttpNio2Protocol.