ATopeCode
Blog sobre Desarrollo de Software

domingo, 17 de febrero de 2019

Servicio Web REST con SpringBoot 2.1.2, Tomcat y PostgreSQL.

En una entrada anterior hemos visto como utilizar la Inyección de Dependencias en Spring y como crear un Servicio Web Rest para desplegarlo en Tomcat.
En este artículo vamos a intentar avanzar un poco más y utilizar toda la comodidad y ventajas que aporta SpringBoot.

SpringBoot está pensado para comenzar un proyecto sin tener que realizar toda la configuración manualmente. Nos ahorra el trabajo de tener que escribir (o copiar pegar XD)
todas las librerías que hacen falta en el archivo 'pom.xml' y los quebraderos de cabeza que se originan cuando existen conflictos de versiones entre ellas.
Y si ya era una ventaja la configuración de Spring por medio de las clases 'JavaConfig' (en vez de utilizar los obsoletos archivos .xml), ahora casi todo el trabajo lo hace Spring por nosotros a partir de un archivo 'application.properties' donde podremos especificar todos los parámetros necesarios para dicha configuración de una forma clara, sencilla y centralizada.


Creando nuestro proyecto SpringBoot con SpringInitializer:

La manera más rápida de crear un proyecto SpringBoot es por medio del sitio web Spring Initializr.
Este sitio web está pensado para crear nuestro proyecto indicando todo lo que vamos a necesitar durante el desarrollo.
En este caso utilizaremos SpringBoot v2.1.2 e indicaremos que vamos a utilizar las dependencias para Web, JPA y PostGreSQL como se puede ver en la siguiente imagen:



Pulsando en el botón 'Generate Project' se inicia la descarga de nuestro proyecto en formato '.zip'. Si descomprimimos el archivo y abrimos el 'pom.xml' podemos ver como SpringInitializer ya ha añadido automáticamente las dependencias de SpringBoot según nuestras necesidades.



Nuestro 'pom.xml' hereda del artifact 'spring-boot-starter-parent' el cual ya agrega por nosotros todas las librerías necesarias para arrancar un ServicioWeb REST con Spring.
Además vemos como al indicar que utilizaríamos 'JPA' nos ha añadido el artifact 'spring-boot-starter-data-jpa' que a su vez incluye todas las dendencias para utilizar los Repositorios y Entidades con Spring JPA y asegurándonos que la versión de todas las librerías son compatibles entre ellas para la versión '2.1.2' de SpringBoot.
Lo mismo ha hecho con las liberías para utilizar nuestra B.D. PostgreSQL.


Configuración del 'pom.xlm' para desplegar en Tomcat:

Por defecto, un proyecto SpringBoot está pensado para ejecutarse por si mismo de forma 'standalone', es decir, el propio proyecto se ejecuta como un servicio escuchando las peticiones en un puerto determinado. Esto es así porque SpringBoot está orientado al desarrollo de 'MicroServicios' (tipo nodejs si utilizas javascript).
Aquí te dejo  un enlace a un artículo donde se explica como arrancar un proyecto SpringBoot en formato standalone.

En nuestro caso, vamos a realizar el despliegue de nuestro proyecto en 'Tomcat', que es un servidor de aplicaciones (servlets o archivos .war) que gestiona todas las peticiones a nuestros servicios web desplegados en él por un mismo puerto. Además nos ofrece la posibilidad de gestionar nuestros servicios web (arrancarlos, pararlos, estadísticas, logs...).

Para ello lo único que hace falta es añadir en nuestro archivo pom.xml el tipo de empaquetado (en vez de .'jar' será un '.war') y añadir la correspondiente dependencia:

Además, para que SpringBoot sepa que debe desplegar el proyecto en Tomcat, debemos de crear nuestra clase de configuración que herede de SpringBootServletInitializer.



Desplegando nuestro proyecto en Tomcat:

Con esto nuestro proyecto está listo para ejecutarse y deslegarse en Tomcat.
En tiempo  de desarrollo, dependendiendo del IDE que utilicemos, habrá que configurarlo para que cuando ejecutemos el proyecto, nuestro IDE arranque una instacia de Tomcat escuchando en un puerto determinado y despliegue automáticamente nuestro servicio web en él. Una vez que finalicemos la ejecución del proyecto, nuestro IDE también será el encargado de destruir la instacia del servicio Tomcat.

En producción, una vez generado el archivo '.war' de nuestro proyecto, habrá que copiarlo en la carpeta 'webapps' de nuestro Tomcat. Teniendo en cuenta que el nombre que le demos al archivo determinará el inicio de la 'url' para las peticiones REST, ya que es la única forma en la que Tomcat puede diferenciar a que servicio web pertenece cada llamada entrante.


Esto es todo de momento amigos :)
A tope codear!!!

No hay comentarios:

Publicar un comentario