我正在将项目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,但是它永远不会发生。谁能帮我吗?
答案 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);
}
};
}
对我有用!