Mod_Cluster LifecycleListeners Spring Boot

问题描述 投票:1回答:1

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

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

我把它像一个Spring启动应用程序。

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,但它永远不会发生。谁能帮我?

java spring spring-boot tomcat9 mod-cluster
1个回答
1
投票

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

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

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

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

    };
}

它对我有用!

© www.soinside.com 2019 - 2024. All rights reserved.