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’.
2. Introducimos los groupId, artifactId y versión, como en todo proyecto maven y pulsamos ‘Next’.
3. En la siguiente pantalla revisamos que todos las rutas de maven, propiedades, etc son la correctas, y pulsamos ‘Next’.
4. Ponemos nombre a nuestro proyecto (para intellij, nombre de carpeta, etc) y finalizamos.
Intellij ejecutará los comandos de creación de proyecto maven, con los parámetros elegidos, con la siguiente estructura de carpetas:
(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:
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 🙂