Spring Boot

En el post anterior Introducción a Spring Boot, hablamos de los beneficios que spring-boot ofrece a los desarrolladores, tanto para aquellos que inician como aquellos con experiencia en el framework. En el siguiente post se mostrará como dar inicio a un proyecto con spring-boot de manera rápida y sencilla.

El ejemplo tiene como requisito entender el proyecto spring-mvc, para mayor información leer la documentación oficial.

Construyendo mi primer app con Spring Boot

  1. Ir a Spring Initializr

  2. Agregar la dependencia Web

  3. Clic en Generate Project

  4. Descargar y abrir el archivo zip

  5. Importar el proyecto en tu IDE favorita

  6. El proyecto cuenta con la siguiente estructura:

    .
    ├── mvnw
    ├── mvnw.cmd
    ├── pom.xml
    └── src
        ├── main
        │   ├── java
        │   │   └── com
        │   │       └── example
        │   │           └── DemoApplication.java
        │   └── resources
        │       ├── application.properties
        │       ├── static
        │       └── templates
        └── test
            └── java
                └── com
                    └── example
                        └── DemoApplicationTests.java
  7. Agregar la siguiente clase:

    @RestController
    public class GreetingController {
    
      @GetMapping("/hi/{name}")
      public String hi(@PathVariable String name) {
      	return "Hi " + name;
      }
    
    }
  8. Ejecutar ./mvnw spring-boot:run

  9. Acceder a http://localhost:8080/hi/yolo

Algunas de las características de spring-boot resaltan claramente:

  • spring-boot-starter-parent hereda de otro parent que es spring-boot-dependencies y es la que provee dependency management, es decir las versiones de las bibliotecas que usemos, ya que spring-boot asegura la compatibilidad con estas versiones. Esta demo usa tomcat 8.5.4 y spring-boot 1.4.0.RELEASE. También, provee las versiones de los plugins y a su vez algunas tareas personalizadas.

    <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>1.4.0.RELEASE</version>
    </parent>
  • spring-boot-starter-web es la única dependencia que se requiere en el proyecto. Esta dependencia proveerá al proyecto con las dependencias necesarias para que el proyecto funcione correctamente. Algunas de estas dependencias son: jackson-databind, spring-web, spring-webmvc.

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
  • Spring Boot provee soporte de plugins tanto para maven como para gradle, el proyecto tendrá el plugin registrado una vez el proyecto haya sido creado.

    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
  • En la clase DemoApplication, se puede notar que esta anotada con @SpringBootApplication. Si accedemos dentro de esta anotación, encontraremos una anotación totalmente nueva @EnableAutoConfiguration, la cual se encarga de cargar las auto-configuraciones.

    @SpringBootApplication
    public class DemoApplication {
    
    	public static void main(String[] args) {
    		SpringApplication.run(DemoApplication.class, args);
    	}
    }
  • Se puede notar que no se ha configurado ningún contenedor como Tomcat. Esto es debido a que spring-boot ha sido construido sobre diferentes contenedores embebidos, por defecto esta usando un Tomcat. spring-boot-starter-web se encarga también de proveer las bibliotecas de tomcat-embed-*.

  • Un banner muy cool! indicando la versión que usamos actualmente. Este banner puede ser modificando haciendo uso de propiedades en application.properties.

    .   ____          _            __ _ _
    /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
    ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
    \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
    '  |____| .__|_| |_|_| |_\__, | / / / /
    =========|_|==============|___/=/_/_/_/
    :: Spring Boot ::        (v1.4.0.RELEASE)

Adicionalmente:

  • Se puede apreciar que no se requiere tener maven instalado ya que se esta usando un wrapper el cual descargará la versión de maven que se indica en .mvn/wrapper/maven-wrapper.properties, dandole portabilidad a nuestro proyecto.


Eddú Meléndez

Java Software Engineer, Open Source Contributor