Utilidades comunes en un proyecto Spring Boot

Utilidades comunes en un proyecto Spring Boot

Este artículo continua la serie iniciada en el primer artículo.

En un gran número de proyectos de desarrollo web o API existen una serie de funcionalidades a implementar en todos ellos. Para solventar estos requerimientos existen diferentes librerías que nos ayudan en la implementación. En este artículo vamos a enseñar y explicar brevemente cómo implementar y configurar diferentes utilidades comunes en un proyecto.

Emailing

Llamamos emailing al envío de correos electrónicos. La aplicación podría ser capaz de enviar correos electrónicos de bienvenida, de baja, o de diferentes avisos. La maquetación de los correos, como ya hemos visto anteriormente, tiene más que ver con la capa vista y por lo tanto está asociada al paquete templates. Aquí lo que nos interesa es el envío en sí mismo, que centralizaremos en la clase utilidad EmailSender. En él podemos ver un método sendEmailAux:

private void sendEmailAux(String to, Set ccs, Set ccos, String subject, String content, Set attachments) throws IOException, MessagingException {

que será el encargado final de enviar un correo con los siguientes parámetros:

  • destino «to«
  • destinos «ccs«
  • destinos ocultos «ccos«
  • asunto
  • contenido HTML del email
  • ficheros adjuntos

La cuenta origen del correo y otros atributos están definidos en la misma clase, que, a su vez, los recoge de las propiedades de aplicación:

  • servidor origen: spring.mail.host=email-smtp.eu-west-1.amazonaws.com
  • puerto: spring.mail.port=587
  • nombre de usuario: spring.mail.username=USERNAMEALKDSJkLAKJD
  • contraseña: spring.mail.password=PASSWORDashjlakslajsdkljalksdjlkajdslkjs5+po
  • cuenta origen: spring.mail.from=noreply@domain.com
  • nombre a mostrar para la cuenta origen: spring.mail.fromname=Application

Tareas periódicas

Las tareas periódicas o concurrentes son aquellas que se ejecutan cada cierto tiempo, como por ejemplo:

  • a cada segundo: * * * * * ? *
  • todos los lunes a las 8:00: 0 8 0 ? * MON *
  • el día de Navidad a las 9:00: 0 9 0 25 DEC ? *

Este tipo de tareas es habitual en aplicaciones, y para ello existe una librería que nos ayuda, Quartz. Como ejemplo, vemos una tarea que se ejecuta cada minuto e imprime la versión de la aplicación en el log.
Para ello, únicamente debemos configurar la tarea PrintVersionJob y planificarla con ConfigureJob. Es especialmente relevante la parte en la que se le indica, a través de una expresión cron, cuándo se ejecutará la tarea:

.withSchedule(CronScheduleBuilder.cronSchedule("0 * * ? * * *"))

Propiedades

Para configurar el proyecto y la aplicación es necesario establecer una serie de propiedades, que a su vez es habitual que dependan del entorno o perfil, pues no querremos hacer lo mismo en un entorno de desarrollo que en producción. Algunas de ellas son más propias de la configuración de la aplicación y otras son más del negocio.
Para obtener el valor de estas propiedades vamos e ver el ejemplo de la propiedad versión. Para obtener su valor accederemos al CommonProperties.java:

@Configuration
@ConfigurationProperties("cmmn")
@PropertySource(ignoreResourceNotFound=true,value="classpath:common.properties")
@PropertySource(ignoreResourceNotFound=true,value="classpath:common-${spring.profiles.active}.properties")
@Getter @Setter
public class CommonProperties {
  private String version;
}

que, a su vez, delega en el fichero de propiedades comunes de negocio:

cmmn.version=@application.version@

que, por último, delega en el pom.xml, del que obtiene su varlor.

4.0.5
...
${version}

Imagen principal: Photo by Daniel Fazio on Unsplash

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

«