Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot Spring Boot-更换默认的嵌入式Tomcat连接器_Spring Boot - Fatal编程技术网

Spring boot Spring Boot-更换默认的嵌入式Tomcat连接器

Spring boot Spring Boot-更换默认的嵌入式Tomcat连接器,spring-boot,Spring Boot,我需要向嵌入式Tomcat添加一个AJP连接器,并禁用(或替换)在8080上侦听的默认连接器 我已经尝试过用EmbeddedServletContainerCustomizer定制它,但是我无法获得Tomcat对象的句柄来替换在那里创建的默认连接器。结果,除了AJP端口外,我在8080上还有http端口 接下来,我尝试了扩展和重写其getTomcatEmbeddedServletContainer方法。根据JavaDoc,这似乎是替换默认连接器的最佳位置,但它仍然被启用(并且也不会创建我的AJP

我需要向嵌入式Tomcat添加一个AJP连接器,并禁用(或替换)在8080上侦听的默认连接器

我已经尝试过用EmbeddedServletContainerCustomizer定制它,但是我无法获得Tomcat对象的句柄来替换在那里创建的默认连接器。结果,除了AJP端口外,我在8080上还有http端口

接下来,我尝试了扩展和重写其getTomcatEmbeddedServletContainer方法。根据JavaDoc,这似乎是替换默认连接器的最佳位置,但它仍然被启用(并且也不会创建我的AJP连接器)。你知道我可能遗漏了什么吗?我已经用调试器验证了我的配置正在运行

根据下面的答案,这里是最干净的解决方案:

@Bean
public EmbeddedServletContainerFactory tomcat() {
    TomcatEmbeddedServletContainerFactory myFactory = new TomcatEmbeddedServletContainerFactory();
    myFactory.setProtocol("AJP/1.3");
    myFactory.setPort(9000);
    return myFactory;
}

@Bean
public EmbeddedServletContainerCustomizer containerCustomizer2() {
    return new EmbeddedServletContainerCustomizer() {
        @Override
        public void customize(ConfigurableEmbeddedServletContainer container) {
            TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory) container;
            tomcat.addConnectorCustomizers(new TomcatConnectorCustomizer() {
                @Override
                public void customize(Connector connector) {
                    connector.setRedirectPort(9001);
                }
            });
        }
    };
} 

您可以使用
TomcatConnectorCustomizer
将现有连接器添加到
TomcatEmbeddedServletContainerFactory
中,从而将其配置为使用AJP

只需创建一个
EmbeddedServletContainerCustomizer
bean并将其重新配置为AJP:

@Configuration
public class ServletConfig {

    // AJP port defined in properties (default 666)
    @Value("${tomcat.ajp.port:666}")
    private Integer ajpPort;

    @Bean
    public EmbeddedServletContainerCustomizer ajpContainerCustomizer() {
        return new EmbeddedServletContainerCustomizer() {

            @Override
            public void customize(ConfigurableEmbeddedServletContainer container) {
                TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory) container;
                tomcat.setProtocol("AJP/1.3");
                tomcat.setPort(ajpPort);
            }

        };
    }

}
“connector.setRedirectPort(9001)”的用途是什么??