日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringBoot整合异步任务实现发送邮件

發布時間:2025/3/19 javascript 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringBoot整合异步任务实现发送邮件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

異步任務在很多地方都用的特別多,例如注冊發送郵件,發送短信等等。本文是講解一個簡單的SpringBoot異步任務的實現,技術總是慢慢進步的啦。

(狗頭保命)👩?💻

很喜歡一句話:”八小時內謀生活,八小時外謀發展“

我們:"待別日相見時,都已有所成”😁


校園一角

SpringBoot異步任務Async及郵件服務搭配起來更棒哦!!!

    • 一、前言
      • 1)概述:
      • 2)使用場景:
    • 二、代碼實現
      • 1、步驟:
      • 2、導入依賴:
      • 3、yml配置文件
      • 4、config層
      • 5、實體類
      • 6、service層
      • 7、controller
      • 8、測試
    • 三、自言自語

一、前言

1)概述:

“異步”(Asynchronous)與“同步”(Synchronous)相對,異步不用阻塞當前線程來等待處理完成,而是允許后續操作,直至其它線程將處理完成,并回調通知此線程。也就是說,異步永遠是非阻塞的(non-blocking)。

異步操作的程序,在代碼執行時,不等待異步調用的語句返回結果就執行后面的程序。當任務間沒有先后順序依賴邏輯的時候,可以使用異步。

同步就是串行。在這里舉個注冊發送郵件的例子:

同步

  • 發送注冊請求–>注冊成功–>執行發送郵件方法—>發送成功–>返回信息前端。
  • 異步

    • 主線程:發送注冊請求–>注冊成功–>調用發送郵件方法—>返回信息給前臺

    • 線程二:--------------------------------------執行發送郵件方法--------------------------

    2)使用場景:

    使用到異步任務的地方非常多。

    就例如:

  • 注冊發送郵件,發送短信
  • App消息推送
  • 節省運維凌晨發布任務時間提供效率
  • 二、代碼實現

    案例:注冊發送郵件

    1、步驟:

  • 新建SpringBoot項目
  • 導入依賴
  • 書寫配置
  • 編碼
  • 啟動測試
  • 2、導入依賴:

    <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency> </dependencies>

    3、yml配置文件

    server:port: 8087 spring:application:name: springboot-scheduledmail:# 配置 SMTP 服務器地址host: smtp.qq.com# 發送者郵箱username: 790933839@qq.com# 配置密碼,注意不是真正的密碼,而是剛剛申請到的授權碼password: vjstfghblprwbdbd# 端口號465或587port: 587# 默認的郵件編碼為UTF-8default-encoding: UTF-8# 配置SSL 加密工廠properties:mail:smtp:socketFactoryClass: javax.net.ssl.SSLSocketFactory#表示開啟 DEBUG 模式,這樣,郵件發送過程的日志會在控制臺打印出來,方便排查錯誤debug: true

    4、config層

    ThreadPoolTaskExecutorConfig 線程池配置

    @Configuration @EnableAsync // 開啟異步配置 public class ThreadPoolTaskExecutorConfig {@Beanpublic TaskExecutor taskExecutor() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();//設置核心線程數executor.setCorePoolSize(10);//設置最大線程數executor.setMaxPoolSize(20);//緩沖隊列200:用來緩沖執行任務的隊列executor.setQueueCapacity(200);//線程活路時間 60 秒executor.setKeepAliveSeconds(60);//線程池名的前綴:設置好了之后可以方便我們定位處理任務所在的線程池executor.setThreadNamePrefix("taskExecutor-");//設置拒絕策略executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());executor.setWaitForTasksToCompleteOnShutdown(true);return executor;} }

    5、實體類

    @Data @Accessors(chain = true) public class Account {private String username;private String password;private String email; }

    6、service層

    public interface EmailService {/**用于注冊成功后發送郵件 @param account 賬號信息*/void senderEmail(Account account); }@Slf4j @Service public class EmailServiceImpl implements EmailService {@Autowiredprivate JavaMailSender javaMailSender;@Async("taskExecutor")@Overridepublic void senderEmail(Account account) {log.info(Thread.currentThread().getName());//一個復雜的郵件MimeMessage message = this.javaMailSender.createMimeMessage();try {//組裝MimeMessageHelper helper = new MimeMessageHelper(message, true);//正文//主題helper.setSubject("小可愛,歡迎你的到來哦!!!");//開啟html模式helper.setText("<h1>小可愛,我想你一定會喜歡這里吧!!!</h1>" +"<p>你的賬號為:"+account.getUsername()+"</p>" +"<p>你的密碼為:"+account.getPassword()+"</p>", true);//附件helper.addAttachment("1.jpg", new File("C:\\Users\\ASUS\\Desktop\\雜七雜八\\雜圖\\2.gif"));helper.setTo(account.getEmail());helper.setFrom("790933839@qq.com");javaMailSender.send(message);} catch (MessagingException e) {e.printStackTrace();}} }

    7、controller

    @Slf4j @RestController @RequestMapping("/async") public class AsyncController {private static List<Account> accountList=new ArrayList<Account>();@Autowiredprivate TaskExecutor taskExecutor;@Autowiredprivate EmailService emailService;/**寫一個注冊發送郵件的栗子 */@PostMapping("/register")public String register(@RequestBody Account account){accountList.add(account);emailService.senderEmail(account);log.info(Thread.currentThread().getName());return "OK";} }

    8、測試

    我們可以看到在執行發送郵件方法時,并非是主線程在執行,而是從線程池中拉了一個線程來執行,做到了異步操作。

    三、自言自語

    一個小小的Demo,不足之處,請見諒!

    你好,我是博主寧在春😁

    如果你看到這篇文章,并且覺得對你有益的話,就給個贊吧,讓我感受一下分享的喜悅吧,蟹蟹。🤗

    如若有寫的有誤的地方,也請大家不嗇賜教!!

    同樣如若有存在疑惑的地方,請留言或私信,定會在第一時間回復你。

    持續更新中

    總結

    以上是生活随笔為你收集整理的SpringBoot整合异步任务实现发送邮件的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。