簡體   English   中英

Mod_Cluster LifecycleListeners Spring Boot

[英]Mod_Cluster LifecycleListeners Spring Boot

我正在將我的項目 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,但它永遠不會發生。 誰能幫我?

我在 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);
        }

    };
}

它對我有用!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM