J'ai la version 1.5.x de l'application Spring Boot, qui utilise org.springframework.boot.context.embedded.Tomcat.TomcatEmbeddedServletContainerFactory
, j'essaie de la migrer vers Spring Boot 2, mais l'application ne se compile pas, bien qu'elle ait une dépendance à org.springframework.boot:spring-boot-starter-Tomcat
. Le compilateur génère l'erreur ci-dessous:
error: package org.springframework.boot.context.embedded.Tomcat
La classe a été supprimée et remplacée par org.springframework.boot.web.embedded.Tomcat.TomcatServletWebServerFactory
Pour plus d'informations, consultez: Spring-Boot-2.0-Migration-Guide , qui indique:
Afin de prendre en charge les cas d’utilisation réactifs, la structure du package de conteneurs incorporés a été considérablement modifiée. EmbeddedServletContainer a été renommé WebServer et le package org.springframework.boot.context.embedded a été déplacé vers org.springframework.boot.web.server. En conséquence, EmbeddedServletContainerCustomizer a été renommé WebServerFactoryCustomizer.
Par exemple, si vous personnalisiez le conteneur Tomcat intégré à l'aide de l'interface de rappel TomcatEmbeddedServletContainerFactory, vous devez maintenant utiliser TomcatServletWebServerFactory et, si vous utilisiez un bean EmbeddedServletContainerCustomizer.
J'ai eu le problème que je devais envoyer une plus grande demande, alors la taille par défaut autorisée:
@Bean
public TomcatServletWebServerFactory containerFactory() {
return new TomcatServletWebServerFactory() {
protected void customizeConnector(Connector connector) {
int maxSize = 50000000;
super.customizeConnector(connector);
connector.setMaxPostSize(maxSize);
connector.setMaxSavePostSize(maxSize);
if (connector.getProtocolHandler() instanceof AbstractHttp11Protocol) {
((AbstractHttp11Protocol <?>) connector.getProtocolHandler()).setMaxSwallowSize(maxSize);
logger.info("Set MaxSwallowSize "+ maxSize);
}
}
};
}
Au démarrage du printemps 2.0.0.RELEASE vous pouvez remplacer par le code suivant ::
@Bean
public ServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory Tomcat = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
Tomcat.addAdditionalTomcatConnectors(redirectConnector());
return Tomcat;
}
private Connector redirectConnector() {
Connector connector = new Connector("org.Apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(8080);
connector.setSecure(false);
connector.setRedirectPort(8443);
return connector;
}
Grand merci! Je viens de cet article: https://blog.swdev.ed.ac.uk/2015/06/24/adding-embedded-Tomcat-ajp-support-to-a-spring-boot-application/
utilisant une botte à ressort 2.1.3:
@Configuration
@Data
public class TomcatConfiguration {
@Value("${Tomcat.ajp.port}")
int ajpPort;
@Value("${Tomcat.ajp.remoteauthentication}")
String remoteAuthentication;
@Value("${Tomcat.ajp.enabled}")
boolean tomcatAjpEnabled;
@Bean
public TomcatServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory Tomcat = new TomcatServletWebServerFactory();
if (tomcatAjpEnabled)
{
Connector ajpConnector = new Connector("AJP/1.3");
ajpConnector.setPort(ajpPort);
ajpConnector.setSecure(false);
ajpConnector.setAllowTrace(false);
ajpConnector.setScheme("https");
Tomcat.addAdditionalTomcatConnectors(ajpConnector);
}
return Tomcat;
}
}