Springboot基础学习之(二十二):异步任务和邮件任务

news2024/11/13 9:05:59

方向一:高效学习方法分享

我认为学习的最好的办法就是做笔记:本人特别喜欢在网上学习一些课堂外的知识,但是如果你没有及时的复习,要想找到自己想要的知识该怎么办呢?对,就是做笔记我在csdn这个app发的所有内容都是笔记,既可以帮助到需要的人,还可以通过文章的编辑复习了一下新的知识,同样在以后的工作生涯里也可以通过笔记去找到自己需要的知识

方向二:高效学习工具/平台推荐

b站:这个app里有很多关于计算机的知识

之前的文章讲解了swagger这个接口框架,这篇文章讲解主要的内容就是异步任务和邮件任务

什么是异步任务?

有异步就有同步,同步任务是什么?

同步:同步是指一个进程在执行某个请求的时候,如果该请求需要一段时间才能返回信息,那么这个进程会一直等待下去,直到收到返回信息才继续执行下去。

异步:异步是指进程不需要一直等待下去,而是继续执行下面的操作,不管其他进程的状态,当有信息返回的时候会通知进程进行处理,这样就可以提高执行的效率了,即异步是我们发出的一个请求,该请求会在后台自动发出并获取数据,然后对数据进行处理,在此过程中,我们可以继续做其他操作,不管它怎么发出请求,不关心它怎么处理数据。

一句话概括:同步任务就是等,异步任务就是跨过

模拟同步任务

一:创建一个类:模拟延时出现的状况

package com.example.demo.service;

import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

@Service    //添加注解:对于 service 层的类,在类上用 @Service 注解声明:并将此类添加到容器中
public class AsyncService {
        public void hello() throws Exception
        {
            Thread.sleep(3000);   //延时3秒
            System.out.println("异步请求");
        }
}

二:创建接口:模拟网页



@RestController
public class controller_test {
    @Autowired
    AsyncService asyncService;

    @GetMapping("/")
    public String hello() throws Exception {
        asyncService.hello();
        return "hello world";


        //什么是异步任务
//        正常的情况下,同步任务就是在不可逆,只能按照顺序而来,一环接着一环
//        异步任务则不是如此,他会遇到一个程序需要很多的时间,系统不会原地等待,他会先向下执行,等时间长的程序执行完擦进行返回
    }
}

运行项目:

同步任务

访问接口,结果并不是立即出现的,而是延时3秒才将出现接口的返回值

 通过spring boot这个框架实现异步任务

方法很简单添加一个注解即可

@Service
public class AsyncService {
         @Async
        public void hello() throws Exception
        {
            Thread.sleep(3000);
            System.out.println("异步请求");
        }
}

运行项目访问接口:仔细看一下控制台语句内容的输出和网页访问的接口出现的情况

通过观察发现:网页访问的接口内容并没有产生延时,立即出现要显示的内容,但是控制台的输出语句却是在访问之后3秒之后才输出的语句,这就是异步任务,跨过现在需要等待的任务去执行下一个代码,之后在返回需要输出的内容。

邮件任务

通过spring boot项目实现自动化邮件的发送

注意:这里实现的邮件发送使用的是qq邮箱

一:导入依赖:

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

二:开启qq邮箱POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务

点击设置

 

 点击服务:开启下面图片中的服务

在点击管理服务

 生成授权码(作为登录使用的密码)

 在配置文件进行登陆配置application.properties

spring.mail.username=2602499389@qq.com
spring.mail.password=输入刚拿到的授权码
spring.mail.host=smtp.qq.com
spring.mail.properties.mail.smtp.ssl.enable=true

环境搭配完成进行发送邮件服务

先来一个简单邮件的发送,在测试类中进行代码的编写

package com.example.demo;

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.annotation.Resource;
import javax.mail.internet.MimeMessage;
import java.io.File;

@SpringBootTest
class DemoApplicationTests {
    @Resource
    JavaMailSenderImpl javaMailSender;

    @Test
    void contextLoads() {
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setSubject("--------");
        simpleMailMessage.setText("不想睡醒的梦");
        simpleMailMessage.setTo("2602499389@qq.com");   //收件人
        simpleMailMessage.setFrom("2602499389@qq.com"); //发件人
        javaMailSender.send(simpleMailMessage);

    }


}

运行test

发送成功

带有附件邮件进行发送

package com.example.demo;

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.annotation.Resource;
import javax.mail.internet.MimeMessage;
import java.io.File;

@SpringBootTest
class DemoApplicationTests {
    @Resource
    JavaMailSenderImpl javaMailSender;

    @Test
    void contextLoads() {
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setSubject("--------");
        simpleMailMessage.setText("不想睡醒的梦");
        simpleMailMessage.setTo("2602499389@qq.com");
        simpleMailMessage.setFrom("2602499389@qq.com");
        javaMailSender.send(simpleMailMessage);

    }
    @Test
    void contextloads2() throws Exception{
        MimeMessage MailMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(MailMessage,true);
        helper.setSubject("复杂界面");
        //文本编写
        helper.setText("<p style='color:red'>不想睡醒的梦</p>",true);
        //附件为图片
        helper.addAttachment("1.jpeg",new File("C:\\Users\\lenovo\\Desktop\\1.jpeg"));
        helper.addAttachment("1.jpeg",new File("C:\\Users\\lenovo\\Desktop\\1.jpeg"));
        helper.setTo("2602499389@qq.com");
        helper.setFrom("2602499389@qq.com");
        javaMailSender.send(MailMessage);

    }

}

 运行第二test

 附件发送成功

基础的邮件任务完成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/432497.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android UI布局优化之include、merge与ViewStub标签的巧用方法

前言 在开发中UI布局是我们都会遇到的问题&#xff0c;随着UI越来越多&#xff0c;布局的重复性、复杂度也会随之增长。 相信大家经常听到include、merge、ViewStub这样的标签&#xff0c;官方也提到这三种布局可用于布局的优化。今天就介绍下这三种布局的使用&#xff0c;记…

SRv6项目实践(一):环境与工具介绍

在一切开始之前&#xff0c;首先介绍一下我们要做什么&#xff0c;做这个要有什么基础&#xff0c;以及实现的环境 1&#xff0c;实验目标与实验基础 我们要在图下图所示的拓扑中&#xff0c;完成在如以下拓扑所示的网络中&#xff0c;配合ONOS实现基本的L2L3转发以及SRv6&am…

港联证券|券商再迎利好!这一比例大幅下调,释放300亿资金

券商利好接二连三。 4月10日&#xff0c;即日起下调证券公司转融通保证金份额。资信优质的公司&#xff0c;保证金份额由20%下调至5%&#xff1b;资信杰出的公司&#xff0c;由20%下调至10%&#xff1b;其余公司由25%下调至15%。中证金融预计&#xff0c;保证金份额下调后&…

Linux系统之tomcat的安装方法

Linux系统之tomcat的安装方法一、tomcat介绍1.tomcat简介2.tomcat官网二、本次环境规划三、安装jdk1.下载jdk包2.安装jdk3.检查jdk版本四、安装tomcat1.下载tomcat2.解压tomcat软件包3.设置环境变量4.查看tomcat版本五、启动tomcat1.启动tomcat服务2.检查tomcat服务状态3.访问t…

原来情感可以这样影响用户体验设计

&#x1f525;情绪的基本情况 Emotion&#xff1a;即刻的生理反应&#xff0c; Feeling&#xff1a;物理的或者心理上的&#xff0c;是emotion经过思考后的 Mood&#xff1a;持续时间更长&#xff0c;是一种状态&#xff0c;受到很多因素影响&#xff08;天气、睡眠&#x…

92-TCP三次握手及TCP四次挥手

TCP三次握手及TCP四次挥手1.tcp三次握手(1)tcp的特点(2)tcp三次握手发生在什么阶段(3)tcp协议报头(4)tcp三次握手的流程2.tcp四次挥手(1)tcp四次挥手发生在什么阶段(2)tcp四次挥手的流程(3)能不能将服务器发端发送的ACK和FIN放在一起发送呢1.tcp三次握手 (1)tcp的特点 TCP 协…

十六、市场活动:查看市场活动明细(二)

功能需求 点击市场活动名称链接,跳转到明细页面,查看市场活动明细 -市场活动的基本信息 -市场活动下所有的备注信息 功能分析 流程图 代码实现 一、ActivityRemarkMapper 1.ActivityRemarkMapper接口 /*** 根据市场活动id查询备注*/List<ActivityRemark> selectActivi…

贪吃蛇小项目

1.总体程序 #include <curses.h> #include <stdlib.h> #include <pthread.h> #include <math.h> #include <time.h> struct Snake //贪吃蛇身子节点 {char node; //节点序号int row; //行坐标int column; //列坐标stru…

探索实践低光照场景下YOLOv5s模型上限,融合CBAM注意力机制开发构建基于改进YOLOv5s的低光照条件下目标检测识别分析系统

在现实生活场景里面&#xff0c;很多场景下光线光照条件都是比较差的&#xff0c;比如夜晚、室内等&#xff0c;这时候以往的目标检测模型是否还能够胜任我们所需的目标检测任务呢&#xff1f;这里主要的想法就是基于地光线条件下的数据集来开发构建目标检测系统&#xff0c;探…

Flowable6.x导出/查看/跟踪流程图(续)

书接上回 项目源码仓库 无论是待办、已办&#xff0c;亦或是流转中、已结束的流程实例&#xff0c;通过使用JS绘制SVG格式的交互式流程图&#xff0c;与以上篇博文中三种方式相比&#xff0c;在效果上都具有明显优势。 运行效果如下图所示&#xff1a; 整合、改造Flowable中…

110.【23种设计模式--创建者模式】

Java 23种设计模式 (一)、设计模式相关内容介绍1.软件设计模式概述(1).软件设计模式的产生背景(2).软件设计模式的概念(3).学习设计模式的重要性(4).设计模式分类 2.UML图(1).类图概述(2).类图的作用(3).类图表示法 3.软件设计原则(1).开闭原则 (重写不修改)(2).里氏代换原则 (…

node的安装与卸载

node的安装与卸载 今天遇到个问题 使用npm命令时报错显示栈溢出&#xff0c;所以将node重装了一下&#xff0c; 一.卸载node&#xff1a; 1.在程序与功能里卸载node.js&#xff0c;然后删除node相关文件夹&#xff0c;此次安装我将node安装在C盘里&#xff0c;将他的全局缓存…

10万字信用大数据一体化监管平台建设方案word

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除。 1.1、 系统主要功能需求分析 XX公共信用信息管理系统的主要业务流程包括信用信息资源编录管理流程、信用信息归集流程、信用信息服务流程和信用信息异议处理流程。 一.1.1…

NLP作业01:利用HMM实现词性标注

作业头 这个作业属于哪个课程自然语言处理这个作业要求在哪里利用HMM实现词性标注作业要求我在这个课程的目标实现词性标注这个作业在哪个具体方面帮助我实现目标代码实现参考文献1.隐马尔科夫模型 2.基于HMM的词性标注  3.基于HMMViterbi算法的词性标注 Python 文章目录 作…

【LeetCode: 673. 最长递增子序列的个数 | 动态规划】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

LeetCode 热题 HOT 100:从前序与中序遍历序列构造二叉树、二叉树展开为链表、二叉树中的最大路径和

LeetCode 热题 HOT 100 105. 从前序与中序遍历序列构造二叉树 题目&#xff1a; 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c; 请构造二叉树并返回其根节点。 示例 1&#xff1…

webassembly——同源策略问题的处理(浏览器不能加载本地资源的问题)

原因&#xff1a;在用chatGPT生成可视化地图前端文件后&#xff0c;打开不能正常显示 WebAssembly是一种新的二进制代码格式&#xff0c;它可以提供更高的性能和更好的安全性。WebAssembly遵循同源策略&#xff0c;这意味着只有与运行WebAssembly代码相同域名下的JavaScript代码…

Linux --- 常用命令

一、常用命令 1.1、常用命令演示 在这一部分中&#xff0c;我们主要介绍几个常用的命令&#xff0c;让大家快速感受以下Linux指令的操作方式。主要包含 以下几个指令&#xff1a; 1.2、Linux命令使用技巧 在我们使用Linux系统命令时&#xff0c;可以使用以下几个技巧&#x…

丹麦PR electronics信号隔离器3185A1 3185A2安全栅

应用 1:1 标准电流信号隔离&#xff0c;信号范围 0(4)...20 mA。标准 DIN 导轨安装。无论在技术或是成本上&#xff0c;都是电流信号电气隔离的选择。能有效抑制浪涌电流&#xff0c;保护控制系统远离信号噪声和瞬变的影响。消除接地环路和测量浮地信号。安装于安全区域或 Zon…

03、Cadence使用记录之超多引脚元器件的快速创建方法(OrCAD Capture CIS)

03、Cadence使用记录之超多引脚元器件的快速创建方法&#xff08;OrCAD Capture CIS&#xff09; 参考的教程是B站的视频&#xff1a;allegro软件入门视频教程全集100讲 前置教程&#xff1a; 01、Cadence使用记录之新建工程与基础操作&#xff08;原理图绘制&#xff1a;OrC…