1

我正在将我的项目 Spring 迁移到 Spring Boot。但是我遇到了一个问题,我们有一个使用 apache2 和 mod_cluster 的反向代理。在实际版本中,我们在 server.xml 中声明了一个 Listerner。

<Listener className="org.jboss.modcluster.container.catalina.standalone.ModClusterListener" advertise="false" proxyList="${proxyList}" />

我把它当作一个 Spring Boot 应用程序。

private Connector ajpConnector() {
    Connector connector = new Connector("AJP/1.3");
    connector.setPort(8009);
    connector.setRedirectPort(8443);
    return connector;
}


private ModClusterListener modCluster() {
    ModClusterListener modClusterListener = new ModClusterListener();
    modClusterListener.setAdvertise(false);
    modClusterListener.setProxyURL(proxyUrl);

    return modClusterListener;
}

@Bean
public WebServerFactoryCustomizer<TomcatServletWebServerFactory> servletContainer() {
    return server -> {
        if (server != null) {
            server.addContextLifecycleListeners(modCluster());
            server.addAdditionalTomcatConnectors(ajpConnector());
        }
    };
}

但它不起作用,ModClusterListener 想要一个 Sever 类型的 LifecycleEvent,但它永远不会发生。谁能帮我?

4

1 回答 1

1

我在 Gitter 上发布了这个问题,Andy Wilkinson 帮助了我。

“根据您所说,听起来 ModClusterListener 需要添加到 Tomcat 的服务器中,但您使用的方法会将其添加到上下文中。您可以使用上下文定制器并从上下文向上导航,直到找到服务器或者您可以改用 TomcatServletWebServerFactory 子类:”

@Bean
public TomcatServletWebServerFactory tomcatFactory() {
    return new TomcatServletWebServerFactory() {

        @Override
        protected TomcatWebServer getTomcatWebServer(Tomcat tomcat) {
            tomcat.getServer().addLifecycleListener(modCluster());
            return new TomcatWebServer(tomcat);
        }

    };
}

它对我有用!

于 2019-02-22T12:52:19.617 回答