Mod_Cluster LifecycleListeners Spring Boot - PullRequest
       36

Mod_Cluster LifecycleListeners Spring Boot

0 голосов
/ 22 февраля 2019

Я переношу свой проект Spring в Spring Boot.Но я столкнулся с проблемой, у нас есть обратный прокси, использующий apache2 и mod_cluster.В реальной версии мы объявляем Listerner в файле server.xml.

<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());
        }
    };
}

Но это не работает, хочет ModClusterListenerLifecycleEvent типа Sever, но этого никогда не происходит.Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 22 февраля 2019

Я разместил вопрос о Гиттере, и Энди Уилкинсон помог мне.

"Из того, что вы сказали, похоже, что ModClusterListener необходимо добавить на сервер Tomcat, но используемый вами метод добавит егов контекст. Вы можете использовать настройщик контекста и переходить вверх из контекста, пока не найдете сервер, или вместо этого вы можете использовать подкласс TomcatServletWebServerFactory: "

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

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

    };
}

Это сработало для меня!

...