Como saben la versión de Spring boot 2 fue liberada hace poco y en Geeks México ya empezamos a hacer pruebas con esta nueva versión.

Paso 1 Configuración

El primer paso será configurar nuestro proyecto, para esto tendremos que configurar los siguientes puntos:

  • Proyecto padre: El primer paso será agregar el proyecto padre de Spring boot 2 el cual definirá todas las versiones a utilizar en las starter dependencies.
  • Agregar dependencias: Agregaremos la dependencia spring-boot-starter-web para crear un microservicio como ejemplo.
  • Configurar plugins: Se definirán 2 plugins, el primero para definir la versión de Java a utilizar (Recordemos que Spring boot 2 solo funciona con Java 8 o superior) y el segundo para generar un fat jar (Una aplicación que contiene un tomcat en si mismo).

pom.xml
Con la configuración anterior en el pom.xml los 3 puntos  mencionados quedarán configurados correctamente.

Paso 2 Creando un Controller

El siguiente paso será crear un controller, en este ejemplo se utilizará Spring mvc:


import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author raidentrance
 *
 */
@RestController
public class SampleController {

	@RequestMapping("/")
	public String home() {
		return "Somos Geeks!";
	}
}

En el controller anterior devolverá la respuesta Somos Geeks! cuando se ejecute la url http://localhost:8080/.

Paso 3 Creando la clase aplicación

Como sabemos Spring boot necesita una clase que contenga un método main para iniciar la aplicación:


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @author raidentrance
 *
 */
@SpringBootApplication
public class SpringBootSampleApplication {
	public static void main(String[] args) {
		SpringApplication.run(SpringBootSampleApplication.class, args);
	}
}

Al ejecutar la clase SpringBootSampleApplication se ejecutará un servidor tomcat y desplegará nuestra aplicación en el.

Paso 4 Agregar un banner a nuestra aplicación (Opcional)

En la versión anterior de Spring boot el banner era un archivo .txt que se mostraba cuando el servidor iniciaba, en la nueva versión de Spring boot 2 tenemos la posibilidad de poner un gif como banner, para hacerlo solo debemos poner un archivo con formato .gif, .txt, .jpg o .png con el nombre banner.

En nuestro ejemplo utilizaremos el siguiente gif:

banner

Paso 5 ejecutar nuestra aplicación

El siguiente paso será ejecutar nuestra aplicación, para hacerlo tenemos las siguientes opciones:

  • Ejecutar el comando mvn spring-boot:run
  • Ejecutar la clase que contiene el método main SpringBootSampleApplication
  • Ejecutar el jar generado utilizando java -jar nombre-de-la-aplicacion.jar

Al ejecutar cualquiera de las opciones anteriores veremos la siguiente salida:

                                      .#############:
                                   &##&ooooooooooo&######.
                                &##oooooooooooooooooooo####:
                              ##ooooooooooooooooooooooooooo###
                            :##oooooooooooooooooooooooooooooo8#
                           .#&ooooooooooooooooooooooooooooooooo#:
                           #&oooooooooooooooooooooooooooooooooo##:
                           #o&#.@oooooooooooooooooooooooo#@:oooo##.
                           #&& @#@ooooooooooooooooooooo@@# &#ooo###
                           #@ @###@oooooooooooooooooo&@###: @oooo##
                           #@:###:@ooooooooooooooooo&@@###@ @oooo##
                           #&###@ @ooooooooooooooooo# .###@ @oooo##
                           &.####@@oooooooooooooooo@  @###@.@oooo##
                           ##@@###@oooooooooooooooo@#####@.@ooooo#&
                          #ooo&@@#ooooooooooooooooo&#####@@:ooooo#*
                          :&#:oooooooooooooooooooooo@#@@oooooooo&#
                           *##o#oooooooooooooooooooooooooooooooo#&
                            .#o8oo#&ooooooooooooooooooo####oooo&#
                              ##o#&oo###:ooooo&&#####oo#ooooooo#
                                :#&oo#&oooooooooo8##ooooooooooooo##
                                   .##&o8#####&oooooo&##oooooooooo##
           :ooooo:  ####8ooooooooo:##oo#####&&8&#####:.#oooooooooo###
        ooooooo***:ooooooooooooooo#ooooooooooooooo#....ooooooooooo#&&#
     .**oooooo:***:o&########8&o##&ooooooooooooo&&.....ooooooooooo#oo&#
    ****oooo*****ooo           ##oooooooooooo#oo#......oooooooooo#&#oo#.
    ***oooo*****:oo            :ooooooooooo##&o&......#ooooooooo#:..#o##
     **:o***** 😮              .##oooo&###:oooo#.......&oooo##&......#&###
   *********..:                ###&&&ooooo##&oo#..........#&.........#o#:o#&
   ****** *                   &#oooooooooooo#8&:.....................:o#&oo#:
  ***:oo                      #&ooooooooooooo##:.....................:&#ooo8#
  *.                          #ooooooooooooooo#:.....................:#&oooo#&
                              #&oooooooooooooo&#.....................##ooooo##
                              ##oooooooooooooo&#....................##oooooo##
                              :#oooooooooooooo##....................##oooooo##
                                ##oooooooooooo#...................##ooooooo###
                                 ##oo:ooooo#8#..................&#:ooooooo###
                                 ##o#o###&#&##...............:##ooooo&&8###.
                                 ##&ooooooooo#  :##########&.  ooooooo#
                                  ##&&oooo&##                  #o### .#* &#
                                                               :#&  ####
                                                                 &###

2018-03-07 15:36:40.630  INFO 43046 --- [           main] c.r.SpringBootSampleApplication          : Starting SpringBootSampleApplication on m-C02RV1WXG8WP.lan with PID 43046 (/Users/maagapi/Documents/Github/spring-boot2/target/classes started by maagapi in /Users/maagapi/Documents/Github/spring-boot2)
2018-03-07 15:36:40.632  INFO 43046 --- [           main] c.r.SpringBootSampleApplication          : No active profile set, falling back to default profiles: default
2018-03-07 15:36:40.664  INFO 43046 --- [           main] ConfigServletWebServerApplicationContext : Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@4842439e: startup date [Wed Mar 07 15:36:40 CST 2018]; root of context hierarchy
2018-03-07 15:36:41.381  INFO 43046 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2018-03-07 15:36:41.403  INFO 43046 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2018-03-07 15:36:41.403  INFO 43046 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.28
2018-03-07 15:36:41.413  INFO 43046 --- [ost-startStop-1] o.a.catalina.core.AprLifecycleListener   : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/Users/maagapi/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.]
2018-03-07 15:36:41.481  INFO 43046 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2018-03-07 15:36:41.481  INFO 43046 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 820 ms
2018-03-07 15:36:41.587  INFO 43046 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Servlet dispatcherServlet mapped to [/]
2018-03-07 15:36:41.590  INFO 43046 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterEncodingFilter' to: [/*]
2018-03-07 15:36:41.590  INFO 43046 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2018-03-07 15:36:41.591  INFO 43046 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2018-03-07 15:36:41.591  INFO 43046 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestContextFilter' to: [/*]
2018-03-07 15:36:41.833  INFO 43046 --- [           main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@4842439e: startup date [Wed Mar 07 15:36:40 CST 2018]; root of context hierarchy
2018-03-07 15:36:41.892  INFO 43046 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/]}" onto public java.lang.String com.raidentrance.controller.SampleController.home()
2018-03-07 15:36:41.897  INFO 43046 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2018-03-07 15:36:41.898  INFO 43046 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2018-03-07 15:36:41.926  INFO 43046 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-03-07 15:36:41.926  INFO 43046 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-03-07 15:36:41.954  INFO 43046 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-03-07 15:36:42.055  INFO 43046 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2018-03-07 15:36:42.096  INFO 43046 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2018-03-07 15:36:42.100  INFO 43046 --- [           main] c.r.SpringBootSampleApplication          : Started SpringBootSampleApplication in 4.479 seconds (JVM running for 6.89)

Una vez que el servidor se inició correctamente podemos ejecutar nuestro endpoint accediendo a la url http://localhost:8080/ , mostrando la siguiente salida:

Somos Geeks!

Puedes encontrar el código completo en el siguiente enlace https://github.com/raidentrance/spring-boot2/tree/master/src/main.

Si te gusta el contenido y quieres enterarte cuando realicemos un post nuevo síguenos en nuestras redes sociales https://twitter.com/geeks_mx y https://www.facebook.com/geeksJavaMexico/.

Autor: Alejandro Agapito Bautista

Twitter: @raidentrance

Contacto:raidentrance@gmail.com