当前位置: 首页 > news >正文

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

    在这里插入图片描述
    在这里插入图片描述

相关文章:

SpringBoot 异步、邮件任务

异步任务 创建一个Hello项目 创建一个类AsyncService 异步处理还是非常常用的&#xff0c;比如我们在网站上发送邮件&#xff0c;后台会去发送邮件&#xff0c;此时前台会造成响应不动&#xff0c;直到邮件发送完毕&#xff0c;响应才会成功&#xff0c;所以我们一般会采用多线…...

【LeetCode】45. 跳跃游戏 II - 贪婪算法

目录标题 2023-8-11 09:49:25 45. 跳跃游戏 II 2023-8-11 09:49:25 自己没做出来&#xff0c;废物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、机器语言&#xff08;二进制&#xff09;>汇编语言&#xff08;助记符&#xff09;>高级语言&#xff08;C、C等&#xff09; 2、c语言擅长底层软件开发&#xff08;操作系统、驱动程序&#xff09;&#xff0c;并不意味着不能开发其他。 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&#xff0c;之前的目标检测工作都是分成两阶段&#xff0c;先提供位置信息在进行目标分类&#xff0c;精度很高但无法满足实时检测的要求。 而YoLo将目标检测看作回归问题&#xff0c;输入为一张图片&#xff0c;输出为S*S*(5*BC)的三维向量。该向量…...

Sentieon | 每周文献-Multi-omics(多组学)-第九期

多组学系列文章-1 标题&#xff08;英文&#xff09;&#xff1a; Prediction of axillary lymph node metastasis in triple-negative breast cancer by multi-omics analysis and an integrated model标题&#xff08;中文&#xff09;&#xff1a; 基于多组学分析和综合模型…...

CSDN竞赛70期

CSDN竞赛70期 CSDN竞赛70期1.小张的手速大比拼分析代码 2.坐公交分析代码 3.三而竭分析代码 4.争风吃醋的豚鼠分析代码 CSDN竞赛70期 1.小张的手速大比拼 在很久很久以前&#xff0c;小张找到了一颗有 N 个节点的有根树 T 。 树上的节点编号在 1 到 N 范围内。 他很快发现树上…...

mac安装vscode 配置git

1、安装vscode 官网地址 下载mac稳定版安装很慢的解决办法 (转自) mac电脑如何解决下载vscode慢的问题 选择谷歌浏览器右上角的3个点&#xff0c;选择下载内容&#xff0c;右键选择复制链接地址&#xff0c;在新窗口粘贴地址&#xff0c; 把地址中的一段替换成下面的vscode.cd…...

UI自动化环境的搭建(python+pycharm+selenium+chrome)

最近在做一些UI自动化的项目&#xff0c;为此从环境搭建来从0到1&#xff0c;希望能够帮助到你&#xff0c;同时也是自我的梳理。将按照如下进行开展&#xff1a; 1、python的下载、安装&#xff0c;python环境变量的配置。 2、pycharm开发工具的下载安装。 3、selenium的安装。…...

AbstractQueuedSynchronizer

目录 AQS是什么AQS什么样内部类成员变量方法public如果不使用AQS会怎样 AQS的应用ReentrantLockSyncNonfairSyncFairSync 其他实现 AQS是什么 AbstractQueuedSynchronizer&#xff08;AQS&#xff09;是Java中的一个并发工具&#xff0c;位于java.util.concurrent.locks包中&a…...

谈谈什么是云计算?以及它的应用

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 ​编辑 一、什么是云计算 二、云计算的优势与劣势&#xff1f; 1、云计算的优势 ①提高资源利用率 ②提升效率 ③降低成本 2、云…...

【BASH】回顾与知识点梳理(十六)

【BASH】回顾与知识点梳理 十六 十六. 十二至十五章知识点总结及练习16.1 总结16.2 练习16.3 简答题 该系列目录 --> 【BASH】回顾与知识点梳理&#xff08;目录&#xff09; 十六. 十二至十五章知识点总结及练习 16.1 总结 绝对路径&#xff1a;『一定由根目录 / 写起』…...

docsify gitee 搭建个人博客

docsify & gitee 搭建个人博客 文章目录 docsify & gitee 搭建个人博客1.npm 安装1.1 在Windows上安装npm&#xff1a;1.2 在macOS上安装npm&#xff1a;1.3 linux 安装npm 2. docsify2.1 安装docsify2.2 自定义配置2.2.1 通过修改index.html&#xff0c;定制化开发页面…...

SpringBoot2-Tomcat部署

1.排除内置 Tomcat 在pom.xml文件中的下添加以下代码&#xff0c;用于排除SpringBoot内置Tomcat <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion&…...

Docker查看、创建、进入容器相关的命令

1.查看、创建、进入容器的指令 用-it指令创建出来的容器&#xff0c;创建完成之后会立马进入容器。退出之后立马关闭容器。 docker run -it --namec1 centos:7 /bin/bash退出容器&#xff1a; exit查看现在正在运行的容器命令&#xff1a; docker ps查看历史容器&#xff0…...

leetcode1. 两数之和

题目&#xff1a;leetcode1. 两数之和 描述&#xff1a; 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中…...

温室花卉种植系统springboot框架jsp鲜花养殖智能管理java源代码

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 基于Git无线传感网络的温室花卉种植智能控制系统 系统…...

测试老鸟经验总结,Jmeter性能测试-重要指标与性能结果分析(超细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Aggregate Report …...

IDEA设置Maven自动编译model

IDEA设置Maven自动编译model 项目工程结构IDEA maven设置 项目工程结构 假设我们的项目结构是下图这样&#xff0c;也就是一个父工程下包含多个子模块&#xff0c;其中dubbo-01-api是公共模块&#xff0c;其它两个模块要想使用必须在pom文件中引入。 本地开发要想不会报错&am…...

关于本地mockjs的使用

安装mockjs npm install mockjs -s在src下新建目录mockData&#xff0c;所有mock请求可以放该文件夹下面。例如在mockData文件夹下新建一个home.js文件。用来处理首页的请求数据 home.js export default {getHomeData:()>{return{code:200,data:{tableData:[{name:张三,se…...

终极指南:如何绕过Cursor AI试用限制永久免费使用Pro功能

终极指南&#xff1a;如何绕过Cursor AI试用限制永久免费使用Pro功能 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your …...

GetQzonehistory:你的QQ空间记忆守护者

GetQzonehistory&#xff1a;你的QQ空间记忆守护者 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 在数字时代&#xff0c;我们的青春记忆散落在各种社交平台上&#xff0c;QQ空间作为一…...

如何解锁被锁的二手iPhone:开源工具applera1n详细指南

如何解锁被锁的二手iPhone&#xff1a;开源工具applera1n详细指南 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 当您购买二手iPhone却遇到激活锁限制时&#xff0c;是否感到束手无策&#xff1f;app…...

如何用Stretchly打造健康工作习惯:休息提醒工具的完整使用指南

如何用Stretchly打造健康工作习惯&#xff1a;休息提醒工具的完整使用指南 【免费下载链接】stretchly The break time reminder app 项目地址: https://gitcode.com/gh_mirrors/st/stretchly 在现代数字工作环境中&#xff0c;长时间盯着电脑屏幕已成为常态&#xff0c…...

S32K3 RTD开发实战:从MCAL配置到SDK工程移植的完整工作流解析

S32K3 RTD开发实战&#xff1a;从MCAL配置到SDK工程移植的完整工作流解析 在嵌入式开发领域&#xff0c;NXP的S32K3系列MCU凭借其强大的实时性能和丰富的开发生态&#xff0c;正逐渐成为汽车电子和工业控制领域的首选。对于已经具备嵌入式开发基础&#xff0c;希望深入掌握S32K…...

5分钟掌握B站视频转文字:免费开源工具bili2text终极指南

5分钟掌握B站视频转文字&#xff1a;免费开源工具bili2text终极指南 【免费下载链接】bili2text Bilibili视频转文字&#xff0c;一步到位&#xff0c;输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 还在为手动整理B站视频内容而烦恼吗&…...

Scroll Reverser深度解析:重新定义你的macOS滚动体验

Scroll Reverser深度解析&#xff1a;重新定义你的macOS滚动体验 【免费下载链接】Scroll-Reverser Per-device scrolling prefs on macOS. 项目地址: https://gitcode.com/gh_mirrors/sc/Scroll-Reverser 还在为macOS触控板和鼠标的滚动方向冲突而烦恼吗&#xff1f;Sc…...

Element UI行政区划数据实战:如何构建高性能三级联动组件

Element UI行政区划数据实战&#xff1a;如何构建高性能三级联动组件 【免费下载链接】element-china-area-data :cn: Element UI && antd Cascader级联选择器 中国省市区三级、二级联动option数据 项目地址: https://gitcode.com/gh_mirrors/el/element-china-area-…...

Qwen3.5-9B-AWQ-4bit实战案例:金融报表截图OCR+关键信息结构化提取

Qwen3.5-9B-AWQ-4bit实战案例&#xff1a;金融报表截图OCR关键信息结构化提取 1. 项目背景与需求分析 在金融行业日常工作中&#xff0c;分析师和业务人员经常需要处理大量报表截图。这些截图可能来自年报、季报、路演材料等各种渠道&#xff0c;包含关键财务数据和业务指标。…...

YOLO12视频流扩展:OpenCV逐帧捕获+YOLO12 API调用代码实例

YOLO12视频流扩展&#xff1a;OpenCV逐帧捕获YOLO12 API调用代码实例 1. 引言 实时视频分析是计算机视觉领域最激动人心的应用之一。想象一下&#xff0c;你需要监控一个停车场&#xff0c;实时统计车辆进出&#xff1b;或者开发一个智能家居系统&#xff0c;自动识别家庭成员…...