POC con Spring Boot

Para empezar con el blog, voy a comenzar con una prueba de concepto sencillita, para tener una aplicación con Spring Boot funcionado. Esta aplicación me servirá luego como base para otros post futuros.

Concepto:
Resumiendo mucho, el objetivo de Spring Boot es simplificar al máximo la configuración de las distintas librerías que usemos en el proyecto, así como de proveer la posibilidad de arrancar directamente nuestra aplicación sin tener necesidad de configurar e instalar un contenedor de servlets (tomcat, jboss, …).

Para ello, por un lado, Spring Boot provee un contenedor embebido (tomcat por defecto), tanto al ejecutarlo como al generar el jar, así como configuraciones por defecto para las distintas librerías que usemos (datasources, …).

De esta manera, podemos arrancar nuestra aplicación desde el primer minuto, sin molestarnos en preparar varios ficheros .properties, .xml, etc con las configuraciones necesarias. Yo lo veo, a día de hoy, casi un ‘must have’ para cualquier nuevo proyecto que use Spring.

Entorno usado:
Java JDK 1.8
Maven 3.2.1
Git 1.9.4
IDE Intellij 13.1.4 Community version

Pasos:

1. Creamos un nuevo proyecto en Intellij de tipo Maven, con el archetype ‘quickstart’, que es el que suelo usar siempre para crear un proyecto maven de cero. Pulsamos ‘Next’.

Ventana de creación de proyecto: paso 1

Selección de proyecto, Maven, y archetype

2. Introducimos los groupId, artifactId y versión, como en todo proyecto maven y pulsamos ‘Next’.

Ventana de creación de proyecto: paso 2

Rellenamos groupId, archetypeId y version.

3. En la siguiente pantalla revisamos que todos las rutas de maven, propiedades, etc son la correctas, y pulsamos ‘Next’.

Ventana de creación de proyecto: paso 3

Revisamos datos…

4. Ponemos nombre a nuestro proyecto (para intellij, nombre de carpeta, etc) y finalizamos.

Ventana de creación de proyecto: paso 3

Nombre para el proyecto en Intellij

Intellij ejecutará los comandos de creación de proyecto maven, con los parámetros elegidos, con la siguiente estructura de carpetas:

Estructura de carpetas básica

Estructura de carpetas archetype ‘quickstart’

(Si se os muestra un pequeño popup con la opción «Enable auto-import», lo aceptamos, para que maven importe automáticamente las dependencias.)

5.Ahora que tenemos ya nuestro proyecto creado, comenzamos a añadirle Spring Boot. Para ello, tal como dice en spring.io , modificamos nuestro pom.xml haciendo que nuestro proyecto maven tenga como parent a spring boot:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.1.5.RELEASE</version>
</parent>

 

y añadiendo la dependencia del artifact spring-boot-starter-web:

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

 

6. Añadimos también al pom.xml el plugin maven de Spring Boot:

<build>
      ...
    <plugins>
      ...
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
      ...
    </plugins>
      ...
</build>

Este plugin solo es necesario para poder arrancar la aplicación desde Maven (lo veremos más adelante)

7. Ponemos como versión java para maven la 1.8 (también funcionaria todo con la 1.7). El pom final (con algunas dependencias para tests: junit y hamcrest) quedaría asi: pom.xml

8. Modificamos nuestra clase App (renombrada a Application) añadiéndole las 3 anotaciones necesarias para arrancar correctamente un aplicación Spring Boot:
@EnableAutoConfiguration: Esta es la anotación propia de Spring Boot que genera toda la «magia» para autoconfigurar todas las librerías que tengamos en el proyecto.
@Configuration: Anotación de Spring para marcar esta clase como clase de configuración. Podriamos definir @Bean en esta clase, por ejemplo.
@ComponentScan: Para que Spring «escanee» en esta clase y a partir del paquete de esta clase para buscar otros componentes springs. Es recomendable, por ello, que nuestro Application.java esté en el «paquete raiz» de nuestra paquetería.

Y añadimos al método main la única linea necesaria para que Spring Boot arranque nuestra aplicación, llamada al método ‘run’ de la clase SpringApplication de Spring Boot. Quedaría así nuestra clase:

package com.edwise.pocs.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

 

Con esto tendríamos nuestro entorno preparado. Así de fácil. Para probarlo, antes, vamos a implementar un pequeño controller Hola mundo. ¡Ya no queda nada!

Creamos el subpaquete ‘controllers’ y en el nuestro controller, con lo básico:

package com.edwise.pocs.springboot.controllers;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloWorldController {

    @RequestMapping("/")
    @ResponseBody
    public String sayHelloWorld() {
        return "Hello World in your SpringBoot Application!";
    }
}

 

Ya estamos listos para probar nuestra aplicación, tenemos 3 maneras de hacerlo:

– Ejecutar la clase Application como cualquier clase con método main, desde Intellij. (botón derecho en la clase y Run ‘Application.main()’)

– Generar el jar con tomcat embebido mediante el plugin Spring Boot de maven: para ello,  ejecutar clean y package en la tool window de Maven en Intellij (o en una consola el comando ‘mvn clean package’ ) Esto nos generará en la subcarpeta target un jar, preparado ya para ejecutarse, con java -jar:

java -jar target/springboot-example-0.1.jar

Esto arrancará nuestra aplicación, con un tomcat embebido.

– Y la más cómoda: ejecutando, en la tool window de Maven ein Intellij, en el plugin Spring Boot, springboot:run (o desde consola con el comando ‘mvn springboot:run’)

Para probar que funciona correctamente, accedemos desde un navegador a: http://localhost:8080/
Si todo ha ido bien, veremos la siguiente pantalla:

Resultado en chrome

En chrome

 

Podéis bajaros el proyecto completo en https://github.com/edwise/java-pocs

Nada más por hoy, espero que os haya gustado. Cualquier duda o sugerencia, podéis dejarme un comentario 🙂

Comenzando…

¡Primer post del blog!

Probando, probando… jeje, parece que funciona. Comienzo este blog hoy, a ver que tal la experiencia. Ya lo he intentado varias veces, a ver si esta es ya la buena 🙂

No creo que me leais muchos, pero por aquí estaré, publicando alguna que otra prueba, trozo de código, POC, o lo que toque en cada momento… ¡A por ello!

Aun tengo que elegir bien el theme, y personalizarlo un poco, sí. Paciencia 😛

...
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
...    

¡saludos!