En esta primera entrada del blog así que vamos a comenzar con algo básico para tener bases claras; vamos a crear una aplicación web sencilla usando Spring Boot para tenerla como base de futuros proyectos.
Requisitos:
- Es clave tener Java (mínimo: 8, pero también sirven 11 ó 12) instalado en la máquina donde vamos a correr las pruebas. En caso de no tenerlo recomiendo usar SDKMAN que hasta ahora me parece una excelente herramienta para instalar múltiples versiones de Java e incluso de otros subproyectos como Spark, Groovy, Scala; de los que hablaremos posteriormente.
- Instalación
curl -s "https://get.sdkman.io" | bash source "$HOME/.sdkman/bin/sdkman-init.sh"
- Con el siguiente comando revisamos si quedó bien instalado y las versiones de Java disponibles
sdk version sdk list java
- Luego seleccionamos la versión a instalar y corremos:
sdk install java <nombre-versión-elegida>
Por ejemplosdk install java 11.0.3-amzn
- Si tu máquina usa
Windows
o deseas obtener más información sobre la instalación de SDKMAN puedes ingresar aquí: https://sdkman.io/install
- También es importante tener instalado Apache Maven en tu máquina para facilitar el proceso de construcción del proyecto, esto también lo puedes hacer usando SDKMAN así:
sdk install maven
Paso 1: Seleccionar opciones y descargar la base de la aplicación usando Spring Initializr
Nos dirigimos a https://start.spring.io/ donde vamos a encontrar una cantidad sin fin de opciones para configurar nuestra nueva aplicación, vamos a examinar algunas:

- Project: Aquí vamos elegir la herramienta de automatización de la construcción y gestión de dependencias que vamos a usar, esto va a definir la estructura del archivo que definirá nuestro proyecto, cómo se compila y cuáles son sus dependencias. Las opciones son:
- Gradle: Herramienta de automatización de la construcción de proyectos enfocada en ser flexible y eficiente, sus definiciones se escriben usando un DSL de Groovy(aunque lás últimas versiones ya soportan Kotlin)
- Apache Maven: Herramienta de automatización y gestión de dependencias basada en el concepto de definir un POM(Project Object Model) es la herramienta más tradicionalmente usada para construir proyectos en Java, sus definiciones se escriben en un archivo XML
- Language: Spring Boot nos permite programar nuestro proyecto en tres diferentes lenguajes, Java, Kotlin y Groovy. Para efectos de este Post vamos a elegir Java.
- Spring Boot: Aquí vamos a elegir la versión a usar, para ese post vamos a alegir la última versión, que viene elegida por defecto, estable (algo interesante es que tenemos la opción de probar las versiones que están en desarrollo para evaluar futuras funcionalidades).
- Project Matadata: Para facilitar el entendimiento de esta parte, podríamos decir que un proyecto tiene un alcance que podría ser resuelto por una o más aplicaciones o servicios.
- Group: Este sería como el paquete base del proyecto, por ejemplo para este blog vamos siempre a usar com.hansospina.demo como agrupador de los proyectos de este sitio.
- Artifact: Este sería ya el el nombre de esta aplicación/servicio específica(o), en nuestor caso la del post del día de hoy sería simpleappNOTA: Con las dos elecciones anteriores, vamos a terminar con un proyecto cuya estructura de paquete sería . => com.hansospina.blog.simpleapp

Si expandimos la sección options
vamos a ver las opciones Name
que viene de autollenado del campo Artifact y Description
que por defecto dice que es un proyecto de Spring Boot, estos valores se va a usar en la parte descriptiva de los proyectos para Maven/Gradle. Finalmente tenemos dos opciones importantes a revisar:

- Packaging: Define la manera en que se va a empaquetar el ejecutable(código objeto) de la aplicación, hay dos opciones Jar(vamos a elegir este por ahora) y War, ambos no son más que un archivo zip renombrado a una extensión con el mismo nombre y una estructura de carpetas especial:
- Jar(Java Application Package): Es la unidad de empaquetamiento básica de aplicaciones Java, pueden ser incluso ejecutables si el sistema operativo lo permite y en su definición indican cuál es la clase por donde se arranca la aplicación(la que contenga el método
main
) - War(Web Application Package): Además de las estructuras de código base, tiene una subcarpeta llamada Web para los recursos
web
y siempre incluye dos directorios especiales: META-INF para la parte descriptiva del paquete y WEB-INF en el que almacenará los recursos privados y reutilizables de la aplicación(librerías, código objeto, etc.)
- Jar(Java Application Package): Es la unidad de empaquetamiento básica de aplicaciones Java, pueden ser incluso ejecutables si el sistema operativo lo permite y en su definición indican cuál es la clase por donde se arranca la aplicación(la que contenga el método
- Java: Define la versión de Java objetivo para correr la aplicación: 8, 11 y 12. Para nuestro ejemplo vamos a usar la 11 que es la más comúnmente usada, pero puedes elegir la 8 o la 12 si ya las tienes instaladas y todo funcionará de igual manera siempre que elijas una versión acorde a la que tengas instalada en tu máquina.
Por último, tenemos la opción Dependencies:

Aquí tendremos un buscador de librerías/dependencias a usar en el proyecto, vamos a escribir web y seleccionamos Spring Web Starter que es la librería más simple con todas las dependencias necesarias para crear nuestra primera aplicación en Spring Boot

Finalmente damos click en el botón Generate the Project
y esto nos va a descargar un archivo ZIP(con el mimo nombre que el que le dimos al proyecto: simpleapp.zip) con nuestro proyecto listo para usar.
Paso 2: Configurar y Ejecutar la aplicación
Procedemos a descomprimirlo y a mirar los contenidos de la carpeta:

Revisemos un poco:
- En la raiz encontramos: HELP.md que es una documentación plantilla de maven y los dos archivos del
maven wrapper
mvnw y mvnw.cmd que permiten ejecutar maven incluso sin tenerlo instalado en la máquina pues se lo descarga y lo ejecuta. - Luego encontramos la carpeta src que va a contener todo el código fuente y nuestros archivos de configuración.
- Dentro de src/main/resources vamos a encontrar el archivo application.properties que podremos usar para configurar nuestra aplicación de muchas maneras gracias a la flexibilidad de Spring Boot, cosas como cambiar el puerto en que corre la aplicación, variables de entorno, url de conexión a otros recursos y muchas cosas más, serán definidas en dicho archivo.
Para continuar abrimos el proyecto en el IDE que usemos regularmente(Yo uso Intellij)
Al abrir el proyecto, busquemos nuestra clase principal navegando desde src/main/java
hacia adentro por el paquete(en mi caso com/hansospina/demo
) hasta encontrar un archivo que tenga el nombre: <Nombre Proyecto>Application.java
en mi caso: SimpleappApplication

Algunas Observaciones:
- Aquí vemos que esta clase es ejecutable pues viene ya con un método public static void main(String[] args) que como sabemos es el requerimiento básico para ejecutar. cualquier programa escrito en Java
- Cuando la aplicación arranca y el main es ejecutado, la aplicación de Spring se inicializa mediante
SpringApplication.run(SimpleappApplication.class, args);
Es hora de verlo correr, nos ubicamos en la terminal dentro del a carpeta del proyecto y corremos: mvn spring-boot:run
y debemos de ver una salida parecida a esta:

Felicitaciones! Ya tienes tu primer aplicación de SpringBoot corriendo!
Si miramos la última línea, dice: Tomcat started on port(s): 8080 (http) with context path ''
es decir que nuestra aplicación web ya está escuchando llamados por el puerto 8080, abramos el navegador en la siguiente url: http://localhost:8080/ y veremos:

Hmmm… no se ve ta bien, pero tranquilo, en el siguiente paso vamos agregar una página html que sea más acorde a un mensaje de bienvenida.
Paso 4: Crear un index.html
Vamos a crear un archivo llamado index.html
dentro de la carpeta src/main/resources/static
así:

Para el contenido del html puse:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hola Spring Boot!</title>
</head>
<body>
<h1>Hola Spring Boot!</h1>
</body>
</html>
Luego de tener esto listo, vamos a decirle a spring que queremos usar dicha página, para ello vamos a agregar el siguiente método en nuestra clase principal SimpleAppAplication
@Bean
public WebMvcConfigurer forwardToIndex() {
return new WebMvcConfigurer() {
@Override
public void addViewControllers(ViewControllerRegistry registry){
registry.addViewController("/").setViewName(
"forward:/index.html");
}
};
}
Quedando así:

Este código básicamente crea un bean (En Spring Framework, los objetos que componen tu aplicación y que son manejados por el Contenedor de Spring se llaman beans, el contenedor de Spring maneja su ciclo de vida) del tipo WebMvcConfigurer
que define un controlador que recibe peticiones en la ruta raiz (“/”) y redirecciona para responder con nuestro archivo html.
Ahora, detenemos la aplicación si todavía está corriendo en la terminal, la ejecutamos de nuevo usando mvn spring-boot:run
y si miramos los logs veremos el siguiente mensaje:

Y si abrimos el navegador veremos:

Mucho mejor, esto sería todo para nuestra primera aplicación con Spring Boot
En el próximo post vamos a agregar un poco de Unit Testing y a exponer un servicio REST en nuestra aplicación.
El código fuente se puede encontrar aquí : https://github.com/HansOspina/blog-spring-boot-1
Qué opinas? Si deseas ver más posts como este déjame saber los temas que te interesan en un comentario o vía twitter