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