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.