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

gyo*_*der 9 spring-boot

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

我尝试使用EmbeddedServletContainerCustomizer进行自定义,但我无法获取Tomcat对象的句柄来替换在那里创建的默认连接器.因此,除了我的AJP端口之外,我最终得到了8080上的http端口.

接下来,我尝试扩展TomcatEmbeddedServletContainerFactory并覆盖其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);
                }
            });
        }
    };
} 
Run Code Online (Sandbox Code Playgroud)

And*_*son 4

您可以使用 aTomcatConnectorCustomizer将现有连接器添加到TomcatEmbeddedServletContainerFactory.