SpringBoot 异步、邮件任务
异步任务
-
创建一个Hello项目
-
创建一个类AsyncService
异步处理还是非常常用的,比如我们在网站上发送邮件,后台会去发送邮件,此时前台会造成响应不动,直到邮件发送完毕,响应才会成功,所以我们一般会采用多线程的方式去处理这些任务。
编写方法,假装正在处理数据,使用线程设置一些延时,模拟同步等待的情况;
@Service public class AsyncService {public void hello(){try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("业务进行中....");} } -
编写AsyncController类
我们去写一个Controller测试一下
@RestController public class AsyncController {@Autowiredprivate AsyncService asyncService;@GetMapping("/hello")public String hello(){asyncService.hello();return "OK";}} -
访问http://localhost:8080/hello进行测试,3秒后出现OK,这是同步等待的情况。

问题:我们如果想让用户直接得到消息,就在后台使用多线程的方式进行处理即可,但是每次都需要自己手动去编写多线程的实现的话,太麻烦了,我们只需要用一个简单的办法,在我们的方法上加一个简单的注解即可,如下:
-
给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 - 测试邮件发送
测试:
-
引入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> -
查看自动配置类:MailSenderAutoConfiguration

这个类中存在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方法省略。。。 } -
配置文件:
spring:mail:username: 2356731504@qq.compassword: 你的qq授权码host: smtp.qq.comproperties:mail:smtp:ssl:enable: true # qq需要配置ssl获取授权码:在QQ邮箱中的设置->账户->开启pop3和smtp服务

-
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);}}

相关文章:
SpringBoot 异步、邮件任务
异步任务 创建一个Hello项目 创建一个类AsyncService 异步处理还是非常常用的,比如我们在网站上发送邮件,后台会去发送邮件,此时前台会造成响应不动,直到邮件发送完毕,响应才会成功,所以我们一般会采用多线…...
【LeetCode】45. 跳跃游戏 II - 贪婪算法
目录标题 2023-8-11 09:49:25 45. 跳跃游戏 II 2023-8-11 09:49:25 自己没做出来,废物Orz class Solution {public int jump(int[] nums) {int length nums.length;int end 0;int maxPosition 0;int steps 0;for (int i 0; i < length - 1; i) {maxPosit…...
[C初阶笔记]P1
什么是C语言 1、机器语言(二进制)>汇编语言(助记符)>高级语言(C、C等) 2、c语言擅长底层软件开发(操作系统、驱动程序),并不意味着不能开发其他。 C语言更贴近操作…...
外企面试题
Interview Prepare is there anyone we can talk to for a character reference? yes, I have some teammate can help to provide related working information. why did you leave/quit your last job? I got blocked on my last job. I found I cant learn new things fr…...
【目标检测系列】YOLOV1解读
前言 从R-CNN到Fast-RCNN,之前的目标检测工作都是分成两阶段,先提供位置信息在进行目标分类,精度很高但无法满足实时检测的要求。 而YoLo将目标检测看作回归问题,输入为一张图片,输出为S*S*(5*BC)的三维向量。该向量…...
Sentieon | 每周文献-Multi-omics(多组学)-第九期
多组学系列文章-1 标题(英文): Prediction of axillary lymph node metastasis in triple-negative breast cancer by multi-omics analysis and an integrated model标题(中文): 基于多组学分析和综合模型…...
CSDN竞赛70期
CSDN竞赛70期 CSDN竞赛70期1.小张的手速大比拼分析代码 2.坐公交分析代码 3.三而竭分析代码 4.争风吃醋的豚鼠分析代码 CSDN竞赛70期 1.小张的手速大比拼 在很久很久以前,小张找到了一颗有 N 个节点的有根树 T 。 树上的节点编号在 1 到 N 范围内。 他很快发现树上…...
mac安装vscode 配置git
1、安装vscode 官网地址 下载mac稳定版安装很慢的解决办法 (转自) mac电脑如何解决下载vscode慢的问题 选择谷歌浏览器右上角的3个点,选择下载内容,右键选择复制链接地址,在新窗口粘贴地址, 把地址中的一段替换成下面的vscode.cd…...
UI自动化环境的搭建(python+pycharm+selenium+chrome)
最近在做一些UI自动化的项目,为此从环境搭建来从0到1,希望能够帮助到你,同时也是自我的梳理。将按照如下进行开展: 1、python的下载、安装,python环境变量的配置。 2、pycharm开发工具的下载安装。 3、selenium的安装。…...
AbstractQueuedSynchronizer
目录 AQS是什么AQS什么样内部类成员变量方法public如果不使用AQS会怎样 AQS的应用ReentrantLockSyncNonfairSyncFairSync 其他实现 AQS是什么 AbstractQueuedSynchronizer(AQS)是Java中的一个并发工具,位于java.util.concurrent.locks包中&a…...
谈谈什么是云计算?以及它的应用
作者:Insist-- 个人主页:insist--个人主页 作者会持续更新网络知识和python基础知识,期待你的关注 目录 编辑 一、什么是云计算 二、云计算的优势与劣势? 1、云计算的优势 ①提高资源利用率 ②提升效率 ③降低成本 2、云…...
【BASH】回顾与知识点梳理(十六)
【BASH】回顾与知识点梳理 十六 十六. 十二至十五章知识点总结及练习16.1 总结16.2 练习16.3 简答题 该系列目录 --> 【BASH】回顾与知识点梳理(目录) 十六. 十二至十五章知识点总结及练习 16.1 总结 绝对路径:『一定由根目录 / 写起』…...
docsify gitee 搭建个人博客
docsify & gitee 搭建个人博客 文章目录 docsify & gitee 搭建个人博客1.npm 安装1.1 在Windows上安装npm:1.2 在macOS上安装npm:1.3 linux 安装npm 2. docsify2.1 安装docsify2.2 自定义配置2.2.1 通过修改index.html,定制化开发页面…...
SpringBoot2-Tomcat部署
1.排除内置 Tomcat 在pom.xml文件中的下添加以下代码,用于排除SpringBoot内置Tomcat <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion&…...
Docker查看、创建、进入容器相关的命令
1.查看、创建、进入容器的指令 用-it指令创建出来的容器,创建完成之后会立马进入容器。退出之后立马关闭容器。 docker run -it --namec1 centos:7 /bin/bash退出容器: exit查看现在正在运行的容器命令: docker ps查看历史容器࿰…...
leetcode1. 两数之和
题目:leetcode1. 两数之和 描述: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中…...
温室花卉种植系统springboot框架jsp鲜花养殖智能管理java源代码
本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 基于Git无线传感网络的温室花卉种植智能控制系统 系统…...
测试老鸟经验总结,Jmeter性能测试-重要指标与性能结果分析(超细)
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Aggregate Report …...
IDEA设置Maven自动编译model
IDEA设置Maven自动编译model 项目工程结构IDEA maven设置 项目工程结构 假设我们的项目结构是下图这样,也就是一个父工程下包含多个子模块,其中dubbo-01-api是公共模块,其它两个模块要想使用必须在pom文件中引入。 本地开发要想不会报错&am…...
关于本地mockjs的使用
安装mockjs npm install mockjs -s在src下新建目录mockData,所有mock请求可以放该文件夹下面。例如在mockData文件夹下新建一个home.js文件。用来处理首页的请求数据 home.js export default {getHomeData:()>{return{code:200,data:{tableData:[{name:张三,se…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践
前言:本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中,跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南,你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案,并结合内网…...
云原生安全实战:API网关Envoy的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口,负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...
Linux操作系统共享Windows操作系统的文件
目录 一、共享文件 二、挂载 一、共享文件 点击虚拟机选项-设置 点击选项,设置文件夹共享为总是启用,点击添加,可添加需要共享的文件夹 查询是否共享成功 ls /mnt/hgfs 如果显示Download(这是我共享的文件夹)&…...
CMS内容管理系统的设计与实现:多站点模式的实现
在一套内容管理系统中,其实有很多站点,比如企业门户网站,产品手册,知识帮助手册等,因此会需要多个站点,甚至PC、mobile、ipad各有一个站点。 每个站点关联的有站点所在目录及所属的域名。 一、站点表设计…...
简单聊下阿里云DNS劫持事件
阿里云域名被DNS劫持事件 事件总结 根据ICANN规则,域名注册商(Verisign)认定aliyuncs.com域名下的部分网站被用于非法活动(如传播恶意软件);顶级域名DNS服务器将aliyuncs.com域名的DNS记录统一解析到shado…...
