SpringBoot 異步、郵件任務

異步任務

  1. 創建一個Hello項目

  2. 創建一個類AsyncService

    異步處理還是非常常用的,比如我們在網站上發送郵件,后臺會去發送郵件,此時前臺會造成響應不動,直到郵件發送完畢,響應才會成功,所以我們一般會采用多線程的方式去處理這些任務。

    編寫方法,假裝正在處理數據,使用線程設置一些延時,模擬同步等待的情況;

    @Service
    public class AsyncService {public void hello(){try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("業務進行中....");}
    }
    
  3. 編寫AsyncController類

    我們去寫一個Controller測試一下

    @RestController
    public class AsyncController {@Autowiredprivate AsyncService asyncService;@GetMapping("/hello")public String hello(){asyncService.hello();return "OK";}}
    
  4. 訪問http://localhost:8080/hello進行測試,3秒后出現OK,這是同步等待的情況。
    在這里插入圖片描述

    問題:我們如果想讓用戶直接得到消息,就在后臺使用多線程的方式進行處理即可,但是每次都需要自己手動去編寫多線程的實現的話,太麻煩了,我們只需要用一個簡單的辦法,在我們的方法上加一個簡單的注解即可,如下:

  5. 給hello方法添加@Async注解;

    //告訴Spring這是一個異步方法
    @Async
    public void hello(){try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("業務進行中....");
    }
    

    SpringBoot就會自己開一個線程池,進行調用!但是要讓這個注解生效,我們還需要在主程序上添加一個注解@EnableAsync ,開啟異步注解功能;

    @EnableAsync //開啟異步注解功能
    @SpringBootApplication
    public class SpringbootTaskApplication {public static void main(String[] args) {SpringApplication.run(SpringbootTaskApplication.class, args);}}
    

7、重啟測試,網頁瞬間響應,后臺代碼依舊執行!

郵件任務

郵件發送,在我們的日常開發中,也非常的多,Springboot也幫我們做了支持

  • 郵件發送需要引入spring-boot-start-mail
  • SpringBoot 自動配置MailSenderAutoConfiguration
  • 定義MailProperties內容,配置在application.yml
  • 自動裝配JavaMailSender
  • 測試郵件發送

測試:

  1. 引入pom依賴

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
    

    看它引入的依賴,可以看到 jakarta.mail

    <dependency><groupId>com.sun.mail</groupId><artifactId>jakarta.mail</artifactId><scope>compile</scope>
    </dependency>
    
  2. 查看自動配置類:MailSenderAutoConfiguration

    image-20200801104504309

    這個類中存在bean,JavaMailSenderImpl

    在這里插入圖片描述

    然后我們去看下配置文件

    @ConfigurationProperties(prefix = "spring.mail")
    public class MailProperties {private static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;private String host;private Integer port;private String username;private String password;private String protocol = "smtp";private Charset defaultEncoding = DEFAULT_CHARSET;private Map<String, String> properties = new HashMap<>();private String jndiName;//set、get方法省略。。。
    }
  3. 配置文件:

     spring:mail:username: 2356731504@qq.compassword: 你的qq授權碼host: smtp.qq.comproperties:mail:smtp:ssl:enable: true # qq需要配置ssl
    

    獲取授權碼:在QQ郵箱中的設置->賬戶->開啟pop3和smtp服務

    image-20200801105503766

  4. Spring單元測試

     package com.liming;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.mail.SimpleMailMessage;import org.springframework.mail.javamail.JavaMailSenderImpl;import org.springframework.mail.javamail.MimeMessageHelper;import javax.mail.MessagingException;import javax.mail.internet.MimeMessage;import java.io.File;@SpringBootTestclass HelloApplicationTests {@Autowiredprivate JavaMailSenderImpl javaMailSender;//郵件設置1:一個簡單的郵件@Testvoid contextLoads() {SimpleMailMessage mailMessage = new SimpleMailMessage();mailMessage.setSubject("黎明,你好"); // 主題mailMessage.setText("這是郵件發送測試。。。"); // 正文mailMessage.setTo("2356731504@qq.com"); // 發送給誰mailMessage.setFrom("2356731504@qq.com"); // 誰發javaMailSender.send(mailMessage);}// 一個復雜的郵件@Testvoid contextLoads2() throws  MessagingException {MimeMessage mimeMessage = javaMailSender.createMimeMessage();//組裝MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);//正文helper.setSubject("黎明,你好~plus");helper.setText("<p style='color:red'>這是郵件發送測試</p>", true);//附件helper.addAttachment("1.jpg", new File("D:\\Users\\Pictures\\Saved Pictures\\SAP-ABAP.jpg"));helper.addAttachment("2.jpg", new File("D:\\Users\\Pictures\\Saved Pictures\\SAP-ABAP.jpg"));helper.setTo("2356731504@qq.com");helper.setFrom("2356731504@qq.com");javaMailSender.send(mimeMessage);}}

    在這里插入圖片描述
    在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/40911.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/40911.shtml
英文地址,請注明出處:http://en.pswp.cn/news/40911.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

神經網絡基礎-神經網絡補充概念-03-邏輯回歸損失函數

概念 邏輯回歸使用的損失函數通常是"對數損失"&#xff08;也稱為"交叉熵損失"&#xff09;或"邏輯損失"。這些損失函數在訓練過程中用于衡量模型預測與實際標簽之間的差異&#xff0c;從而幫助模型逐步調整權重參數&#xff0c;以更好地擬合數…

指靜脈開集測試(OpenSet-test)代碼(包含7個數據集)

七個數據集:sdu、mmc、hkpu、scut、utfvp、vera、nupt 一、SDU 80%用于訓練,20%用于作為開集測試 1.數據集分割代碼 ①先把636個類別提取出來 func: 創建temp_sdu,將636個類劃分出來。下一個代碼塊將進行openset_sdu的分割import os from shutil import copy, rmtre…

c++--SLT六大組件之間的關系

1.SLT六大組件&#xff1a; 容器&#xff0c;迭代器&#xff0c;算法&#xff0c;仿函數&#xff0c;適配器&#xff0c;空間配置器 2.六大組件之間的關系 容器&#xff1a;容器是STL最基礎的組件&#xff0c;沒有容器&#xff0c;就沒有數據&#xff0c;容器的作用就是用來存…

IO流 詳細介紹

一、IO流概述 1.IO&#xff1a;輸入(Input讀取數據)/輸出(Output寫數據) 2.流&#xff1a;是一種抽象概念&#xff0c;是對數據傳輸的總稱,也就是說數據在設備間的傳輸稱為流&#xff0c;流的本質是數據傳輸IO流就是用來處理設備間數據傳輸問題的。 3.常見的應用&#xff1a…

【Sklearn】基于隨機森林算法的數據分類預測(Excel可直接替換數據)

【Sklearn】基于隨機森林算法的數據分類預測(Excel可直接替換數據) 1.模型原理1.1 模型原理1.2 數學模型2.模型參數3.文件結構4.Excel數據5.下載地址6.完整代碼7.運行結果1.模型原理 隨機森林(Random Forest)是一種集成學習方法,通過組合多個決策樹來構建強大的分類或回歸…

JVM - 垃圾回收機制

JVM的垃圾回收機制(簡稱GC) JVM的垃圾回收機制非常強大&#xff0c;是JVM的一個很重要的功能&#xff0c;而且這也是跟對象實例息息相關的&#xff0c;如果對象實例不用了要怎么清除呢&#xff1f; 如何判斷對象已經沒用了 當JVM認為一個對像已經沒用了&#xff0c;就會把這個…

初識Sentinel

目錄 1.解決雪崩的方式有4種&#xff1a; 1.1.2超時處理&#xff1a; 1.1.3倉壁模式 1.1.4.斷路器 1.1.5.限流 1.1.6.總結 1.2.服務保護技術對比 1.3.Sentinel介紹和安裝 1.3.1.初識Sentinel 1.3.2.安裝Sentinel 1.4.微服務整合Sentinel 2.流量控制 2.1.簇點鏈路 …

Ubuntu中怎么清空mysql數據

要清空 MySQL 數據&#xff0c;可以使用以下步驟來執行。請注意&#xff0c;這將會永久刪除數據庫中的所有數據&#xff0c;請謹慎操作&#xff0c;并在操作前備份重要數據。 登錄 MySQL&#xff1a; 打開終端&#xff0c;使用以下命令登錄到 MySQL 數據庫。根據情況&#xf…

黑馬項目一階段面試58題 Web14題(一)

一、什么是AJAX 異步的JavaScript和XML。用來做前端和后端的異步請求的技術。 異步請求&#xff1a;只更新部分前端界面的請求&#xff0c;做到局部更新。 比如注冊&#xff0c;提示用戶名已存在而整個頁面沒有動 比如百度圖片搜索美女&#xff0c;進度條越變越短&#xff…

== 和 equals 的對比 [面試題]

和 equals 的對比[面試題] 文章目錄 和 equals 的對比[面試題]1. 和 equals 簡介2. Object 類中 equals() 源碼3. String 類中 equals() 源碼4. Integer 類中 equals() 源碼5. 如何重寫 equals 方法 1. 和 equals 簡介 是一個比較運算符 &#xff1a;既可以判斷基本數據類型…

【數據結構OJ題】鏈表的回文結構

原題鏈接&#xff1a;https://www.nowcoder.com/practice/d281619e4b3e4a60a2cc66ea32855bfa?tpId49&&tqId29370&rp1&ru/activity/oj&qru/ta/2016test/question-ranking 目錄 1. 題目描述 2. 思路分析 3. 代碼實現 1. 題目描述 2. 思路分析 在做這道…

re中的match和search有什么區別?

問題:請說明以下re模塊中的match和search有什么區別? re.match()與re.search()的區別 re.match()只匹配字符串的開始,如果字符串開始不符合正則表達式,則匹配失敗,結果返回None,而re.search()匹配整個字符串,直到找到一個匹配 re.search() re.search()掃描整個字符串并…

老師如何制作二維碼分班查詢系統?技術老師分享的創建框架值得借鑒

作為一名班主任&#xff0c;開學前需要搞定分班問題&#xff0c;可以通過制作一個分班二維碼查詢系統&#xff0c;讓學生和家長可以通過掃描二維碼快速查到自己的分班信息&#xff0c;分享一下我制作的過程&#xff0c;希望對老師們有幫助&#xff08;結尾有驚喜&#xff09;&a…

內網穿透——使用Windows自帶的網站程序建立網站

文章目錄 1.前言2.Windows網頁設置2.1 Windows IIS功能設置2.2 IIS網頁訪問測試 3. Cpolar內網穿透3.1 下載安裝Cpolar3.2 Cpolar云端設置3.3 Cpolar本地設置 4.公網訪問測試5.結語 1.前言 在網上各種教程和介紹中&#xff0c;搭建網頁都會借助各種軟件的幫助&#xff0c;比如…

RP2040開發板自制樹莓派邏輯分析儀

目錄 前言 1 準備工作和前提條件 1.1 Raspberry Pi Pico RP2040板子一個 1.2 Firmware-LogicAnalyzer-5.0.0.0-PICO.uf2固件 1.3 LogicAnalyzer-5.0.0.0-win-x64軟件 2 操作指南 2.1 按住Raspberry Pi Pico開發板的BOOTSEL按鍵&#xff0c;再接上USB接口到電腦 2.2 刷入…

End-to-End Object Detection with Transformers

DERT 目標檢測 基于卷積神經網絡的目標檢測回顧DETR對比Swin Transformer摘要檢測網絡流程DERT網絡架構編碼器概述解碼器概述整體結構object queries的初始化Decoder中的Muiti-Head Self-AttentionDecoder中的Muiti-Head Attention 損失函數解決的問題 基于卷積神經網絡的目標檢…

內網穿透實戰應用——【通過cpolar分享本地電腦上有趣的照片:發布piwigo網頁】

通過cpolar分享本地電腦上有趣的照片&#xff1a;發布piwigo網頁 文章目錄 通過cpolar分享本地電腦上有趣的照片&#xff1a;發布piwigo網頁前言1. 設定一條內網穿透數據隧道2. 與piwigo網站綁定3. 在創建隧道界面填寫關鍵信息4. 隧道創建完成 總結 前言 首先在本地電腦上部署…

Unity - 從PackageManager中安裝內置工具

1.MemoryProfiler 內存分析工具 add from git url &#xff1a;com.unity.memoryprofiler 使用地址記錄&#xff1a;unity3d內存分析工具memory profiler_unity3d memory profile_Marco&GalaxyDragon的博客-CSDN博客 理解Unity Memory Profiler - 知乎

Gradle和Maven的詳細講解和兩者之間的區別

Gradle 詳細介紹 Gradle 是一種基于 Groovy 語言的構建自動化工具&#xff0c;用于構建、測試和部署項目。它使用聲明式的腳本來定義構建過程&#xff0c;允許開發者靈活地配置項目構建。Gradle 使用一種被稱為 Groovy DSL&#xff08;領域特定語言&#xff09;的語法&#xf…

mysql知識點+面試總結

目錄 1 mysql介紹 2 數據庫常見語法 3 數據庫表的常見語法 4 其他常見語法&#xff08;日期&#xff0c;查詢表字段&#xff09; 5 JDBC開發步驟 6 索引 6.1 索引常見語法 7 常見面試總結 8 java代碼搭建監控頁面 1 mysql介紹 數據庫&#xff1a;存儲在硬盤上的文件系統…