1. QUARKS TRAINING CENTER
PROYECTO GESTION
DE INVITADOS
Desarrollo de Aplicaciones Web con Spring
MVC, Spring Data, Spring Security y Spring
Boot
Renato De La Rosa Castillo
18/05/2019
Tutorial practico para crear un mantenimiento de invitados usando Spring MVC, Spring Data,
Spring Boot, Spring Security y Boostrap con Thymeleaf desplegado en un PAAS como HEROKU,
usando como IDE STS 3.9
3. Tutorial Spring MVC, Spring Boot, Spring Data, Spring Security Página 3
Sobre el autor
Renato De La Rosa
Instructor JAVA en Quarks Training Center,
graduado en Ingeniería de computación y
sistemas, cuenta con un post-grado en la
Universidad Federal de Sao Paulo, con más
de 8 años desarrollando en tecnología JAVA
en empresas del sector público y privado.
Apasionante de la tecnología y autodidacta.
4. Tutorial Spring MVC, Spring Boot, Spring Data, Spring Security Página 4
Tabla de contenido
Glosario......................................................................................................................................... 5
Requisitos...................................................................................................................................... 6
Implementación............................................................................................................................ 7
Publicación.................................................................................................................................. 29
Conclusiones/Recomendaciones ............................................................................................... 40
5. Tutorial Spring MVC, Spring Boot, Spring Data, Spring Security Página 5
GLOSARIO
MVC Modelo Vista Controlador
PAAS Plataforma como Servicio
STS Spring Tool Suite
6. Tutorial Spring MVC, Spring Boot, Spring Data, Spring Security Página 6
REQUISITOS
Instalar JDK 1.8 https://www.java.com/es/download/
Descargar STS para Windows desde https://spring.io/tools3/sts/all
Descargar MySQL para Windows desde https://dev.mysql.com/downloads/mysql/5.6.html
Descargar Postgres para Windows desde https://www.postgresql.org/download/windows/
Descargar GIT para Windows desde https://git-scm.com/download/win
Tener cuenta en GitHub https://github.com/
Tener cuenta en Heroku https://www.heroku.com/
Instalar Heroku CLI https://devcenter.heroku.com/articles/heroku-cli#download-and-install
7. Tutorial Spring MVC, Spring Boot, Spring Data, Spring Security Página 7
Capítulo 1
Implementación
Abrimos el STS y creamos un proyecto con Spring starter Project
Le colocamos un nombre y descripción a nuestro proyecto
8. Tutorial Spring MVC, Spring Boot, Spring Data, Spring Security Página 8
Y escogemos las siguientes dependencias
Creamos nuestra clase Controler que se encargara de mostrar nuestra lista de
Invitados
9. Tutorial Spring MVC, Spring Boot, Spring Data, Spring Security Página 9
Creamos nuestra página html com Thymeleaf dentro de la carpeta
resources/templates
Importante:
El nombre de nuestra página html tiene que coincidir con el nombre que devuelve
nuestro controller
El código de nuestra página debería quedar como sigue:
Los links de boostrap lo puedes copiar del siguiente enlace:
10. Tutorial Spring MVC, Spring Boot, Spring Data, Spring Security Página 10
https://getbootstrap.com/docs/3.4/getting-started/
Adicionalmente configuramos en nuestro application.properties lo siguiente:
Nota: Por el momento eliminamos la dependencia JPA y h2 que se agregó al inicio, ya
que lo usaremos más adelante
Guardamos y levantamos nuestro proyecto con Spring Boot
11. Tutorial Spring MVC, Spring Boot, Spring Data, Spring Security Página 11
Probamos accediendo mediante nuestro browser preferido, en mi caso Google
Chrome
No olvidar adicionar la dependencia JPA y H2 que eliminamos temporalmente.
13. Tutorial Spring MVC, Spring Boot, Spring Data, Spring Security Página 13
Creamos una entidad Invitado con los siguientes atributos dentro de un paquete
model
14. Tutorial Spring MVC, Spring Boot, Spring Data, Spring Security Página 14
Adicionamos sus gets y sets respectivamente,
Creamos una interfaz Invitados dentro del paquete repositorio
Ahora modificamos nuestro controller para que devuelva una lista de invitados, de tipo
ModelAndView
15. Tutorial Spring MVC, Spring Boot, Spring Data, Spring Security Página 15
Luego modificamos nuestra página html para mostrar nuestra lista de invitados
Creamos un script para insertar ciertos datos en nuestra tabla invitados, y luego
colocaremos dicho script en la carpeta src/main/resources
16. Tutorial Spring MVC, Spring Boot, Spring Data, Spring Security Página 16
Volvemos a ejecutar la instancia con Spring Boot, y probamos accediendo mediante
nuestro browser preferido
Ahora vamos a crear la funcionalidad de poder crear invitados, para eso modificamos
nuestra página html e incluimos un formulario dentro del cuerpo del panel
Lo primero que haremos es usar un objeto de tipo CommandObject que pasaremos
mediante el método listar de nuestra clase Controller, dicho objeto será encargado de
setear los valores ingresados en los campos del formulario y devolver dicho objeto
como una instancia de la clase Invitado
17. Tutorial Spring MVC, Spring Boot, Spring Data, Spring Security Página 17
Luego para enviar los datos ingresados, definimos en nuestro action el path al que
queremos que se direccione
Para eso en nuestra clase controller, necesitamos crear el método que recibirá la
instancia de nuestra clase Invitado
Guardamos y volvemos a desplegar el proyecto con Spring Boot
18. Tutorial Spring MVC, Spring Boot, Spring Data, Spring Security Página 18
Nota: Antes de probar la funcionalidad de crear un invitado es necesario, eliminar el
archivo import.sql
Reiniciamos la instancia con Spring Boot, y ya podríamos crear y listar nuestros
invitados
Ahora vamos a utilizar un motor de base de datos más robusto como MySQL que ya
deberíamos tener instalado, para eso creamos una base de datos y una tabla que es
donde guardaremos la información del invitado
19. Tutorial Spring MVC, Spring Boot, Spring Data, Spring Security Página 19
Agregamos la dependencia en nuestro pom.xml
Y configuramos nuestro application.properties para que apunte a la base de datos
recientemente creada
Desplegamos nuevamente y probamos
20. Tutorial Spring MVC, Spring Boot, Spring Data, Spring Security Página 20
Ahora agregamos seguridad con spring security, para eso agregamos la siguiente
dependencia
Con eso solo podemos acceder a nuestra aplicación mediante el usuario por defecto
user y con el password que se genera automáticamente en nuestra consola
21. Tutorial Spring MVC, Spring Boot, Spring Data, Spring Security Página 21
Si queremos personalizar los usuarios a conectarse tendremos que implementar la
clase InMemorySecurityConfig dentro del paquete config, en la cual configuramos los
usuarios que queremos que accedan a nuestra aplicación
Luego desplegamos y probamos nuevamente nuestra aplicación
22. Tutorial Spring MVC, Spring Boot, Spring Data, Spring Security Página 22
Configurando el LOG en nuestra aplicación por buenas prácticas, para este caso
escogeremos LOG4j. Agregamos la dependencia en nuestro pom.xml
Nota: Excluimos el LOG4J en algunas dependencias ya que de no ser así, generara
conflicto de duplicidad posteriormente.
Luego adicionamos nuestro archivo log4j2.xml
23. Tutorial Spring MVC, Spring Boot, Spring Data, Spring Security Página 23
Acá es opcional si queremos que pinte en consola o escriba en un archivo, para este
caso escogemos lo primero:
Y listo ya podemos usar nuestro logger para escribir nuestros mensajes en la aplicación
Hasta ahora habíamos usado la dependencia spring data jpa, y habíamos usado la
interfaz JPA Repository, donde usábamos los métodos por defectos que implementaba
la interfaz, si bien es cierto esto nos reducía bastante el desarrollo, era una caja negra
lo que será poco mantenible al momento de llevarlo a HEROKU.
24. Tutorial Spring MVC, Spring Boot, Spring Data, Spring Security Página 24
Debido a eso eliminamos la dependencia spring data jpa y adicionamos spring boot
starter jdbc
Creamos nuestras interfaces Services y DAO; así como sus implementaciones
25. Tutorial Spring MVC, Spring Boot, Spring Data, Spring Security Página 25
También eliminamos la interfaz Invitados ya que no la usaremos más, en su lugar
implementaremos la interfaz RowMapper
También actualizamos nuestra clase invitado dentro del paquete model, y quitamos la
anotación entity y las anotaciones de sus atributos, agregamos los constructores y el
método toString por defecto y mantenemos sus getter y setters
26. Tutorial Spring MVC, Spring Boot, Spring Data, Spring Security Página 26
Bien luego de los cambios, usaremos PostGresSQL en lugar de MYSQL, ya explicaremos
porque en la parte de publicación. Agregamos la dependencia correspondiente y
modificamos nuestro application.properties
Previamente, tenemos que tener creada nuestra base de datos fiesta y nuestra tabla
invitado en dicha motor de Base de datos.
27. Tutorial Spring MVC, Spring Boot, Spring Data, Spring Security Página 27
Nota: En nuestros archivos controller y html debería ser transparente el cambio, por lo
que no surge realizar ningún cambio.
Probamos nuevamente y ya debería estar grabando y listando en PostgresSQL
29. Tutorial Spring MVC, Spring Boot, Spring Data, Spring Security Página 29
Capítulo 2
Publicación
Ahora vamos a desplegar nuestra aplicación en un PAAS, es decir en la nube, para este
taller hemos seleccionado Heroku por su simplicidad. Para eso tenemos que tener
previamente tener una cuenta creada de tipo free, es decir una cuenta en la que no
sea necesario ingresar algún método de pago, pero debido a eso Heroku nos obliga a
usar solo Base de Datos Postgress, esta es la razón por la migración realizada
anteriormente, en caso quieren trabajar con MYSQL, es necesario contar con una
cuenta con opción de pago en HEROKU.
Seguidamente, creamos el archivo heroku-db.properties en el paquete resources
Luego para subir un proyecto en Heroku, es necesario crear un archivo Procfile (sin
extensión) que deberá estar ubicado en la raíz de nuestro proyecto
30. Tutorial Spring MVC, Spring Boot, Spring Data, Spring Security Página 30
Ahora para que Heroku, pueda compilar y publicar nuestro proyecto, hace uso de GIT,
no entraremos en detalle a explicar sobre esta herramienta de versionamiento ya que
no es parte del tutorial y asumimos que ya lo tienen previamente instalado. Abrimos el
Git Bash y nos ubicamos en la ruta donde se encuentran nuestros archivos
Una vez ubicado en la ruta, inicializamos GIT, adicionamos los archivos y realizamos el
commit respectivo
32. Tutorial Spring MVC, Spring Boot, Spring Data, Spring Security Página 32
Ahora es necesario tener una cuenta en Heroku y tener instalado heroku CLI en
nuestra PC
Adicionamos la base de datos postgressSQL
33. Tutorial Spring MVC, Spring Boot, Spring Data, Spring Security Página 33
Finalmente enviamos el código a la rama master mediante HEROKU, usando GIT
Como vemos a continuación, se ha generado un deployado nuestra aplicación en el
dashboard de Heroku
34. Tutorial Spring MVC, Spring Boot, Spring Data, Spring Security Página 34
Se queremos más detalle sobre la configuración en Heroku podemos ingresar a la
interfaz visual que nos provee este
Ingresamos a la url generado en el deployment como sigue a continuación:
Para ver el log, ingresamos el siguiente comando
35. Tutorial Spring MVC, Spring Boot, Spring Data, Spring Security Página 35
IMPORTANTE
Ya que solo se ha configurado nuestra base de datos fiesta en HEROKU, tenemos que
vía comando crear nuestra tabla invitado, pero antes tenemos que asegurarnos que en
nuestro PATH de Windows o LINUX, tengamos configuramos la carpeta donde está
instalado nuestro POSTGRESS.
36. Tutorial Spring MVC, Spring Boot, Spring Data, Spring Security Página 36
Como vemos esta es nuestra base de datos de la nuestra aplicación qu-gestion-fiesta
https://data.heroku.com/
37. Tutorial Spring MVC, Spring Boot, Spring Data, Spring Security Página 37
Mayor detallle de los comandos para interactuar con nuestra base de datos postgress
desde heroku cli, lo pueden encontrar en:
https://devcenter.heroku.com/articles/heroku-postgresql#local-setup
https://devcenter.heroku.com/categories/data-management
https://devcenter.heroku.com/articles/heroku-postgresql
Finalmente ya inserta y lista nuestros invitados usando un PAAS como es HEROKU
40. Tutorial Spring MVC, Spring Boot, Spring Data, Spring Security Página 40
Capítulo 3
Conclusiones/Recomendaciones
Tener una consola abierta para el login en HEROKU, otra para ver los logs de la
aplicación, otra para ver los logs de la base de datos y otra para la configuración de
nuestra base de datos, como se aprecia a continuación:
Todos deben ser abiertos, desde la carpeta donde están nuestros archivos de la
aplicación