Configuración de un SpringBoot web Project con Spring JDBC API y ejecutamos el proyecto dentro de un contenedor docker.

Inicialización

Para crear el proyecto, Usamos Spring Initializr. Incluir las dependencias que aparecen en la captura de pantalla

Dependencias

Necesitamos la JDBC API para abstraernos de la gestión de conexión a la base de datos. JDBC Template se ocupa de abrir y cerrar la conexión además de otras ventajas como el mapeo automático del resultado de las consultas a objetos java. Podríamos haber elegido spring-boot-starter-data-jpa ya que incluye el spring-boot-starter-jdbc pero que no voy a usar jpa.

Muy importante no olvidar el driver de la base de datos correspondiente

Lombok nos permite olvidarnos de los getters/setters etc. Anotando las clases con la anotación @Data, lombok se ocupa del resto.

N.B. Para que nos funcione el lombok en un IDE deberíamos instalarlo. Por ello seguir los pasos indicados en el proyecto de lombok. Una vez instalado lombok hay que habilitar el procesamiento de anotaciones en eclipse. Por ello hay que seleccionar el proyecto, la opción “properties” y habilitar el check correspondiente.

Instalar el proyecto

En mi caso uso Eclipse. Una vez descargado el jar, lo descomprimo y se importa en eclipse como un proyecto maven

Compilación y ejecutar en eclipse

En eclipse solo hay que ejecutar el proyecto como una aplicación java normal que ejecutaría la clase que contiene el main generada automáticamente en el proyecto

Ejecutar proyecto: linea de comando

Si no tenemos maven instalado, podemos usar el wrapper mvnw generado para nosotros en el proyecto para la construcción

La primera vez que ejecutamos mvnw, el script descarga la versión correcta de maven, dependencias y iniciar la aplicación

$./mvnw spring-boot:run

Organización de paquetes

Es una organización simple pero que nos deja el proyecto bastante organizado.

Dividimos el proyecto en varios módulos:

Acceso a datos: Repository

Context: Configuraciones generales

Model: Se definen las clases que se van a mapear los resultados de consultas (Cada instancia de una clase contendrá un resultado de la consulta o un registro).

Además, definimos un paquete donde pondremos nuestras clases para personalizar las excepciones y por ultimo el paquete controller donde vamos a definir nuestros servicios rest.

Configurar perfiles

Definimos los perfiles de maven en el pom.xml para construir la aplicación con diferentes configuraciones que representan los diferentes entornos (Por ejemplo: produccion, local, preproduccion.. ).

Estos perfiles se tienen en cuenta durante el build de la aplicación.

Por ejemplo, ejecutando el siguiente comando, construimos las aplicación con la configuración de pro

$./mvnw package -P pro

Para enlazar los perfiles de maven con las de Spring hay que pasar la variable de build a la aplicación para que esté disponible cuando se inicie. Para hacerlo, hay que definirlo de la siguiente manera

La variable @spring.profiles.active@ debe coincidir con la propiedad declarada del perfil de Maven.

Ejecutando la compilación, todos los archivos del directorio src/main/resources serán procesados por Maven y el placeholder de application.properties será reemplazado por la variable que se ha definido en maven.

Ejecución personalizada

Tal como he definido las configuraciones en los pasos anteriores, podemos arrancar la aplicación con parámetros que pasamos por línea de comando. Algo muy útil, si no queremos grabar datos sensibles en los ficheros de la aplicación como por ejemplo los datos de conexión a base de datos

Ejemplo ejecutando el comando de esta forma:

$java -jar target/calculador-0.0.1-SNAPSHOT.jar –spring.datasource.username=nombreusario –spring.datasource.password=constraseña –spring.profiles.active=pro

Ejecutar la aplicación en Docker

Para ejecutar la aplicación dentro de un contenedor, simplemente creamos el fichero Dockerfile con contenido similar a la captura

Definido el fichero Dockerfile, para construir nuestra imagen docker con nuestra aplicación ejecutamos el comando:

$ docker build -t eakitcom/calculadora:1.0 .

Ejecutar un contenedor a partir de la imagen creada:

$docker run -d –name calculadorcontainer -p 8090:8080 eakitcom/calculadora:1.0

Corremos así un contenedor con el nombre calculadorcontainer.

Esto es todo