Mod_Cluster LifecycleListeners春季启动

时间:2019-02-21 23:36:12

标签: java spring spring-boot tomcat9 mod-cluster

我正在将项目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,但是它永远不会发生。谁能帮我吗?

1 个答案:

答案 0 :(得分:1)

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

”从您所说的看来,似乎需要将ModClusterListener添加到Tomcat的Server中,但是您所使用的方法会将其添加到Context中。您可以使用上下文自定义程序并从Context向上导航直到您找到服务器,或者可以改用TomcatServletWebServerFactory子类:“

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

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

    };
}

对我有用!