Estás viendo una versión antigua de esta página. Ve a la versión actual.

Comparar con el actual Ver el historial de la página

« Anterior Versión 8 Siguiente »

Spring Boot viene con un servidor embedido, un Tomcat por defecto (podremos cambiarlo, se explica cómo más abajo). Para ejecutar nuestro proyecto Spring Boot en Eclipse, primero tendremos que añadir la dependencia spring-boot-starter-web nuestro pom.xml (si no la hemos añadido en la creación del proyecto):

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

Una vez incluida, podremos ejecutar nuestro proyecto haciendo click derecho en el nombre de nuestro proyecto en el explorador, y yéndonos a Run As → Spring Boot App:

Una vez hecho esto, podremos ver que está corriendo en la consola:

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 en el puerto 8080, pero esto podemos modificarlo en el archivo src/main/resources/application.properties añadiendo: server.port=8443

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

Label# SamplesAverageMinMaxStd. Dev.Error %ThroughputReceived KB/secSent KB/secAvg. Bytes
Startup30007154935.783743610293.858360355.9593557255.67238466195
Others300010451.3596616820287.880241854.8209444954.53981144195
Others300010241.1550322750292.112950355.6269778555.3417113195


Devuelve un objeto complejo con datos

Label# SamplesAverageMinMaxStd. Dev.Error %ThroughputReceived KB/secSent KB/sec
Startup100011431601322.8671905097.68486861202.333599919.93763432
Others100032171.328216473097.88566954202.749516719.9786181
Others100021161.110529603098.52216749204.067887920.10852833
Others100021211.344498419098.53187506204.087995120.11050966


Uso de memoria

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


Jetty

Devuelve un String simple

Label# SamplesAverageMinMaxStd. Dev.Error %ThroughputReceived KB/secSent KB/sec
Startup30007056140.137050650291.516859456.082833355.22878
Others300010211.0589250310293.599530256.4835033855.6233485
Others300010210.9260343170294.348508656.6275939555.7652448


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

Label# SamplesAverageMinMaxStd. Dev.Error %ThroughputReceived KB/secSent KB/sec
Startup30006045131.61887020295.683027863.8144034656.01807363
Others300010221.2554478620292.740046863.1792483955.46051669
Others300010181.5594779750294.377391863.5326206955.77071681


Devuelve un objeto complejo con datos

Label# SamplesAverageMinMaxStd. Dev.Error %ThroughputReceived KB/secSent KB/sec
Startup1000423852132.6443576098.02960494205.632413520.00799554
Others100032191.293570253098.55129595206.630500420.01823199
Others100022271.659250132098.74592673207.038578820.05776637
Others100021171.260904041098.28975821206.082139519.96510714


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

<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

<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

<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/

  • Sin etiquetas