Versiones comparadas

Clave

  • Se ha añadido esta línea.
  • Se ha eliminado esta línea.
  • El formato se ha cambiado.

...

En la consola podremos consultar también los eventos que se produzcan durante la ejecución, como errores, o escrituras al log. Por defecto se despliega el Tomcat embebido en el puerto 8080, pero esto podemos modificarlo en el archivo src/main/resources/application.properties añadiendo: server.port=8443 (el puerto que queramos).

A continuación mostramos una comparativa entre Tomcat, Jetty y Undertow, seguido de las instrucciones para cada uno. Según la comparativa, la opción más eficiente es Undertow, y es la que se está utilizando con las primeras aplicaciones, pero se explican las tres opciones para que, a falta de un arquetipo definitivo, tengamos toda la información disponible.

Rendimiento

Test carga de peticiones REST

Tomcat

Devuelve un String simple

...

Devuelve un objeto complejo con datos

...

Uso de memoria

HeapUsedMaxThreads Live
697,827,328 B124,260,976 B2,147,483,648 B17

Jetty

Devuelve un String simple

...

Devuelve un objeto complejo con datos

Label# SamplesAverageMinMaxStd. Dev.Error %ThroughputReceived KB/secSent KB/sec
Startup100011031397278.7961107098.13542689203.362671719.93375859
Others100032201.500210319098.48335631204.083673920.00443175
Others100032452.729377218098.29942003203.702509119.96706969

Uso de memoria

HeapUsedMaxThreads Live
628,621,312 B311,476,776 B2,147,483,648 B19

Undertow

Devuelve un String simple

...

Devuelve un objeto complejo con datos

...

Uso de memoria

HeapUsedMaxThreads Live
630,718,464 B114,599,536 B2,147,483,648 B17

Conclusiones

Tras la comparativa parece que las mejores opciones son Undertow y Tomcat puesto que hacen una buena gestión de la memoria sin tener grandes retardos. Undertow parece la mejor opción neta debido al menor uso de memoria y tiempos de respuesta.

Configración de despliegue por servidor

Para cambiar entre cada uno de los servidores es tan simple como cambiar las dependencias en el pom.xml. Para configurar que funcione por HTTPS nos vale la misma configuración en los tres servidores.

Tomcat

Bloque de código
languagexml
<properties><tomcat.version>8.5.6</tomcat.version></properties>
<dependency>
   <groupId>org.apache.tomcat.embed</groupId>
   <artifactId>tomcat-embed-core</artifactId>
   <version>${tomcat.version}</version>
</dependency>
<dependency>
   <groupId>org.apache.tomcat.embed</groupId>
   <artifactId>tomcat-embed-el</artifactId>
   <version>${tomcat.version}</version>
</dependency>
<dependency>
   <groupId>org.apache.tomcat.embed</groupId>
   <artifactId>tomcat-embed-websocket</artifactId>
   <version>${tomcat.version}</version>
</dependency>

Jetty

Bloque de código
languagexml
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
   <exclusions>
      <exclusion>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-tomcat</artifactId>
      </exclusion>
   </exclusions>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-jetty</artifactId>
</dependency>

Undertow

Bloque de código
languagexml
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
   <exclusions>
      <exclusion>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-tomcat</artifactId>
      </exclusion>
   </exclusions>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
   <groupId>io.undertow</groupId>
   <artifactId>undertow-servlet</artifactId>
   <version>1.3.24.Final</version>
</dependency>

Fuente: https://examples.javacodegeeks.com/enterprise-java/spring/tomcat-vs-jetty-vs-undertow-comparison-of-spring-boot-embedded-servlet-containers/Se podría cambiar la configuración para que en vez de un Tomcat utilice Jetty o Undertow, pero no debemos cambiarlo, pues la configuración de logs está hecha para Tomcat, y cambiarlo traería problemas.