Monta fácilmente tu proyecto con Spring Boot Starter POMs
0. Índice de contenidos.
- 1. Introducción.
- 2. Entorno.
- 3. Ejemplo de aplicación web con Maven.
- 4. Ejemplo de aplicación web con Gradle.
- 5. EnableAutoConfiguration
- 6. Referencias.
- 7. Conclusiones.
1. Introducción.
Spring Boot Starter POMs es una utilidad existente dentro de Spring Boot que facilita la creación y configuración de una aplicación Java. Cuando creamos un proyecto y montamos el fichero de configuración de Maven debemos añadir las librerías de Spring y de terceros que necesita el proyecto para funcionar.
A partir de ahora esta tarea nos la podemos ahorrar utilizando alguno de los proyectos pre-configurados de Spring boot, hay muchos ya creados que nos pueden servir.
spring-boot-starter spring-boot-starter-amqp spring-boot-starter-aop spring-boot-starter-batch spring-boot-starter-data-elasticsearch spring-boot-starter-data-gemfire spring-boot-starter-data-jpa spring-boot-starter-data-mongodb spring-boot-starter-data-rest spring-boot-starter-data-solr spring-boot-starter-freemarker spring-boot-starter-groovy-templates spring-boot-starter-hornetq spring-boot-starter-integration spring-boot-starter-jdbc spring-boot-starter-jta-atomikos spring-boot-starter-jta-bitronix spring-boot-starter-mobile spring-boot-starter-redis spring-boot-starter-security spring-boot-starter-social-facebook spring-boot-starter-social-linkedin spring-boot-starter-social-twitter spring-boot-starter-test spring-boot-starter-thymeleaf spring-boot-starter-velocity spring-boot-starter-web spring-boot-starter-websocket spring-boot-starter-ws
Otros preparados ya con configuración de monitorización y soporte remoto por ssh:
spring-boot-starter-actuator spring-boot-starter-remote-shell
Y para añadir funcionalidad para logs o servidores donde desplegar una aplicación web en desarrollo:
spring-boot-starter-jetty spring-boot-starter-log4j spring-boot-starter-logging spring-boot-starter-tomcat
En este tutorial vamos a ver cómo configurar un projecto web de forma sencilla con spring boot starter.
2. Entorno.
El tutorial se ha realizado con el siguiente entorno:
- MacBook Pro 15′ (2.4 GHz Intel Core i5, 8GB DDR3 SDRAM).
- Sistema Operativo: Mac OS Mavericks 10.9.5
- Spring Boot Starter 1.20.BUILD-SNAPSHOT
3. Ejemplo de aplicación web con Maven
Nos configura nuestra aplicación con todo (o casi) lo necesario para empezar a montar nuestro proyecto web:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.autentia.tutoriales</groupId> <artifactId>spring-boot-starter-web-sample</artifactId> <version>0.0.1-SNAPSHOT</version> <!-- Inherit defaults from Spring Boot --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.2.0.BUILD-SNAPSHOT</version> </parent> <!-- Add typical dependencies for a web application --> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <!-- Package as an executable jar --> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <!-- Add Spring repositories --> <!-- (you don't need this if you are using a .RELEASE version) --> <repositories> <repository> <id>spring-snapshots</id> <url>http://repo.spring.io/snapshot</url> <snapshots><enabled>true</enabled></snapshots> </repository> <repository> <id>spring-milestones</id> <url>http://repo.spring.io/milestone</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-snapshots</id> <url>http://repo.spring.io/snapshot</url> </pluginRepository> <pluginRepository> <id>spring-milestones</id> <url>http://repo.spring.io/milestone</url> </pluginRepository> </pluginRepositories> </project>
Primero configuramos nuestro proyecto web añadiendo spring-boot-starter-parent como proyecto padre. éste ya nos añade dependencias comunes a proyectos con Spring como el spring-core y una serie de plugins por defecto: maven-jar-plugin, maven-surefire-plugin, maven-war-plugin, exec-maven-plugin, etc.
Si en nuestro proyecto ya tuviéramos un ‘parent’ no podríamos poner otro, para este caso habría que añadir la dependencia sprig-boot-dependencies (es el parent del spring-boot-starter-parent).
<dependencyManagement> <dependencies> <dependency> <!-- Import dependency management from Spring Boot --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>1.2.0.BUILD-SNAPSHOT</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
El web-starter nos configurará en nuestro proyecto por defecto el spring-boot-starter-tomcat junto a otros como spring-web, spring-webmvc, hibernate-validator, jackson-databind, etc.
4. Ejemplo de aplicación web con Gradle
La configuración del proyecto web para usar spring boot starter con Gradle es la siguiente:
buildscript { repositories { jcenter() maven { url "http://repo.spring.io/snapshot" } maven { url "http://repo.spring.io/milestone" } } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.0.BUILD-SNAPSHOT") } } apply plugin: 'java' apply plugin: 'spring-boot' jar { baseName = 'myproject' version = '0.0.1-SNAPSHOT' } repositories { jcenter() maven { url "http://repo.spring.io/snapshot" } maven { url "http://repo.spring.io/milestone" } } dependencies { compile("org.springframework.boot:spring-boot-starter-web") testCompile("org.springframework.boot:spring-boot-starter-test") }
5. @EnableAutoConfiguration
La anotación @EnableAutoConfiguration sirve para indicarle a Spring Boot la clase de arranque de nuestra aplicación, podría ser una clase main donde delegamos en Spring la ‘auto configuración’.
Que sería nuestra prueba de concepto sin nuestro querido ‘Hola mundo’. Vamos a probar si tenemos bien configurado el proyecto creando una clase Java que anotada con @RestController y @RequestMapping será un servicio REST.
package com.autentia.tutoriales; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @EnableAutoConfiguration public class Greeting { @RequestMapping("/") String getGreeting() { return "Hello World!"; } public static void main(String[] args) throws Exception { SpringApplication.run(Greeting.class, args); } }
Para arrancar la aplicación bastaría con lanzar por consola el comando mvn spring-boot:run:
[INFO] <<< spring-boot-maven-plugin:1.2.0.BUILD-SNAPSHOT:run (default-cli) @ spring-boot-starter-web-sample <<< [INFO] [INFO] --- spring-boot-maven-plugin:1.2.0.BUILD-SNAPSHOT:run (default-cli) @ spring-boot-starter-web-sample --- [INFO] Attaching agents: [] . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.2.0.BUILD-SNAPSHOT) 2014-10-19 23:25:10.319 INFO 47902 --- [main] com.autentia.tutoriales.Greeting: Starting Greeting on MacBook-Pro-Juan-Alonso.local with PID 47902 (/Users/jalonso/spring_boot/target/classes started by jalonso in /Users/jalonso/spring_boot)
Esto arrancará un servidor Tomcat embebido, no es necesario instalarnos nada y para pruebas en muy útil. Accedemos con un navegador a la url http://localhost:8080/ y veremos el mensaje.
6. Referencias
- http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#getting-started-introducing-spring-boot
- https://github.com/spring-projects/spring-boot/tree/master/spring-boot-starters
7. Conclusiones.
Como hemos podido comprobar, Spring cada vez nos facilita más la tareas de configuración de los proyectos dejándonos más tiempo libre para que nos centremos en desarrollar la funcionalidad de la aplicación sin tener que complicarnos con la gestión de las librerías, aspecto a agradecerles.
Espero que te haya sido de ayuda.
Un saludo.
Juan
[…] que perseguimos con el presente tutorial, es integrar el uso de MyBatis a través de los starters de Spring Boot, ya que hasta hace poco, no disponíamos de un starter dedicado a MyBatis y teníamos […]
Hola, gracias por el artículo, tengo una pregunta aunque ha pasado ya un tiempo, ¿como despliego el proyecto en mi servidor? Ya no necesito tener tomcat y generar un war?