<commit_before>---
layout: post
section-type: post
title: Tareas asíncronas con Spring
overview: Este Cookbook simula el registro de un usuario en una base de datos mientras envía correos electrónicos reales en segundo plano usando el servidor SMTP de Google.
category: cookbook
tags: [ 'spring boot']
source: https://github.com/windoctor7/codigo-tutoriales-blog/tree/master/spring-set-profile
---

## Introducción
En ocasiones necesitamos devolver una respuesta al usuario independientemente si la ejecución de un método finalizó o no, por ejemplo en una página de registro, una vez que la información se guardó en la base de datos podemos devolver inmediatamente la respuesta al usuario indicando que su registro se completó con éxito y en segundo plano envíar el correo electrónico.

___

## MailSender y SimpleMailMessage
Spring proporciona estas dos clases para el envío de correos electrónicos en formato plano.

[``MailSender``](http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/mail/MailSender.html). Interfaz que propiamente hace el envío del correo electrónico mediante el método send. Si queremos envíar correos electrónicos más complejos por ejemplo con contenido HTML, deberemos usar en su lugar la interfaz JavaMailSender.

[``SimpleMailMessage``](http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/mail/SimpleMailMessage.html). Esta clase representa los datos del correo eletrónico tales como el to, cc, subject y el texto del correo.

Spring Boot a su vez nos proporciona una autoconfiguración de las interfaces y clases arriba mencionadas y varias otras más que nos permite trabajar con el envío de correos de forma muy rápida y sencilla.

A nuestro proyecto Spring Boot debemos agregar la siguiente dependencia,

    compile group: 'org.springframework.boot', name: 'spring-boot-starter-mail', version: '1.5.2.RELEASE'

---

## Habilitando el soporte para tareas asíncronas
Un método anotado con [``@Async``](http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/annotation/Async.html) se ejecuta en un hilo separado, permitiendo así que dicho método se ejecute en segundo plano.

Para habilitar el soporte de tareas asíncronas necesitamos agregar la anotación [``@EnableAsync``](http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/scheduling/annotation/EnableAsync.html) a la clase principal de Spring Boot.<commit_msg>Se corrige la url del codigo fuente de este cookbook<commit_after>---
layout: post
section-type: post
title: Tareas asíncronas con Spring
overview: Este Cookbook simula el registro de un usuario en una base de datos mientras envía correos electrónicos reales en segundo plano usando el servidor SMTP de Google.
category: cookbook
tags: [ 'spring boot']
source: https://github.com/windoctor7/codigo-tutoriales-blog/tree/master/spring-async
---

## Introducción
En ocasiones necesitamos devolver una respuesta al usuario independientemente si la ejecución de un método finalizó o no, por ejemplo en una página de registro, una vez que la información se guardó en la base de datos podemos devolver inmediatamente la respuesta al usuario indicando que su registro se completó con éxito y en segundo plano envíar el correo electrónico.

___

## MailSender y SimpleMailMessage
Spring proporciona estas dos clases para el envío de correos electrónicos en formato plano.

[``MailSender``](http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/mail/MailSender.html). Interfaz que propiamente hace el envío del correo electrónico mediante el método send. Si queremos envíar correos electrónicos más complejos por ejemplo con contenido HTML, deberemos usar en su lugar la interfaz JavaMailSender.

[``SimpleMailMessage``](http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/mail/SimpleMailMessage.html). Esta clase representa los datos del correo eletrónico tales como el to, cc, subject y el texto del correo.

Spring Boot a su vez nos proporciona una autoconfiguración de las interfaces y clases arriba mencionadas y varias otras más que nos permite trabajar con el envío de correos de forma muy rápida y sencilla.

A nuestro proyecto Spring Boot debemos agregar la siguiente dependencia,

    compile group: 'org.springframework.boot', name: 'spring-boot-starter-mail', version: '1.5.2.RELEASE'

---

## Habilitando el soporte para tareas asíncronas
Un método anotado con [``@Async``](http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/annotation/Async.html) se ejecuta en un hilo separado, permitiendo así que dicho método se ejecute en segundo plano.

Para habilitar el soporte de tareas asíncronas necesitamos agregar la anotación [``@EnableAsync``](http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/scheduling/annotation/EnableAsync.html) a la clase principal de Spring Boot.
{'fraction_non_alphanumeric': 0.07161696084398458, 'fraction_numerical': 0.0016230472712517752, 'mean_word_length': 5.154806491885144, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2357956', 'n_tokens_mistral': 1524, 'n_tokens_neox': 1505, 'n_words': 558}