SpringBoot 学习(八)异步任务,邮件发送和定时执行

news2024/12/25 1:32:59

8. 异步任务

(1) 开启异步注解

// 启动类
@EnableAsync
@SpringBootApplication
public class TestApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }

}

(2) 声明异步方法

// service
@Service
public class AsyncService {

    // 声明此方法为异步方法
    @Async
    public void sleep() {

        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("数据正在处理...");

        SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
        Date edate = new Date(System.currentTimeMillis());
        System.out.println("edate:" + formater.format(edate));
    }
}

(3) 调用异步方法

// controller
@RestController
public class AsyncController {

    @Autowired
    AsyncService asyncService;

    @RequestMapping("/sleep")
    public String sleep() {
        SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
        Date sdate = new Date(System.currentTimeMillis());
        System.out.println("sdate:" + formater.format(sdate));
        asyncService.sleep();   // 休眠三秒,等待服务器响应
        return "OK";
    }
}

(4) 测试效果

在这里插入图片描述

在这里插入图片描述

9. 邮件发送

(1) 配置

# application.properties
spring.mail.username=1942953841@qq.com
spring.mail.password=wedahkcfqhwkfdcg
spring.mail.host=smtp.qq.com
# qq 邮箱开启加密验证
spring.mail.properties.mail.smtp.ssl.enable=true

(2) 测试

@Autowired
JavaMailSenderImpl mailSender;

// 测试简单邮件发送
@Test
void sendSimpleMail() {
    SimpleMailMessage mailMessage = new SimpleMailMessage();
    mailMessage.setSubject("Hello");
    mailMessage.setText("Nice to meet you !");
    mailMessage.setTo("486530039@qq.com");
    mailMessage.setFrom("1942953841@qq.com");
    mailSender.send(mailMessage);
}

// 测试复杂邮件发送
@Test
void sendMimeMail() throws MessagingException {
    MimeMessage mimeMessage = mailSender.createMimeMessage();

    // 组装
    MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);

    // 正文
    helper.setSubject("Hello");
    helper.setText("<p style='color:blue'>Nice to meet you !</p>", true);

    // 附件
    helper.addAttachment("鬼泣DMC.jpg", new File("C:\\Users\\LENOVO\\Pictures\\鬼泣DMC.jpg"));

    helper.setTo("486530039@qq.com");
    helper.setFrom("1942953841@qq.com");
    mailSender.send(mimeMessage);
}

10. 定时执行

(1) 启动定时注解

// 启动类
@EnableScheduling   // 开启定时功能
@SpringBootApplication
public class TestApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }

}

(2) 测试

@Service
public class ScheduledService {

    // corn 表达式
    // 秒 分 时 日 月 星期
    @Scheduled(cron = "30 * * * * 0-7")
    public void timer30() {
        SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
        Date date = new Date(System.currentTimeMillis());
        System.out.println("Time is " + formater.format(date));
    }
}

在这里插入图片描述

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

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

相关文章

更新node版本运行程序报错

更新了电脑上的node以及npm的版本&#xff0c;出现了一些问题&#xff1a; 1.npm 报错 Class extends value undefined is not a constructor or null 在运行或者安装依赖的时候&#xff0c;出现这个问题的话&#xff0c;可以先下载一个低一级别的node版本&#xff0c;然后升…

安卓生成公钥和md5签名

安卓公钥和md5证书签名 大家好&#xff0c;最近需要备案app&#xff0c;用到了公钥和md5&#xff0c;MD5签名我倒是知道&#xff0c;然而对于公钥却一下子不知道了&#xff0c; 现在我讲一下我的流程。 首先是md5证书签名的查看&#xff0c; 生成了apk和签名.jks后&…

人工智能赋能财务体系架构

我看到这个价格给我的感觉上半部分是一个数据中台&#xff0c;下半部分全部就是机器学习的原理&#xff1b;

Learn Prompt- Midjourney案例:建筑设计

基础结构​ 这是一个非常适合在 V5 中的生产建筑的提示结构。 我们不妨先回顾一下上一章节的通用模板&#xff1a; 主题 背景,环境,氛围 风格 参数 在建筑生成的设定下&#xff0c;我们可以使用 主题详细描述 周边环境 建筑风格或时期、建筑师、设计师和摄影师 参数…

【深度学习实验】卷积神经网络(一):卷积运算及其Pytorch实现(一维卷积:窄卷积、宽卷积、等宽卷积;二维卷积)

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 1. 一维卷积 a. 概念 b. 示例 c. 分类 窄卷积&#xff08;Narrow Convolution&#xff09; 宽卷积&#xff08;Wide Convolution&#xff09; 等宽卷积&#xff08;Same Convolution&am…

通信协议:Uart的Verilog实现(上)

1、前言 调制解调器是主机/设备与串行数据通路之间的接口&#xff0c;以串行单比特格式发送和接收数据。它也被称为通用异步收发器(Uart, Universal Asynchronous Receiver/Transmitter)&#xff0c;这表明该设备能够接收和发送数据&#xff0c;并且发送和接收单元不同步。 本节…

Python项目实战:基于2D或3D的区域增长算法

文章目录 一、简介二、项目实战2.1、2D图像&#xff08;10x10&#xff09;2.2、2D图像&#xff08;100x100&#xff09;2.3、3D图像&#xff08;10x10x10&#xff09; 一、简介 区域增长算法是一种用于图像分割方法&#xff0c;将相邻像素按照一定的相似性合并成一个区域。 步…

Spring 学习(九)整合 Mybatis

1. 整合 Mybatis 步骤 导入相关 jar 包 <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency>…

规模化、可复制的大模型应用——企业知识管家

9月18日&#xff0c; “2023可信AI大会暨南京人工智能产业发展大会大模型高质量发展分论坛”在南京成功举办&#xff0c;九章云极DataCanvas公司受邀出席论坛&#xff0c;和与会嘉宾共同探讨大模型时代企业知识管理面临的挑战和机遇&#xff0c;同时作为大模型创新与应用代表企…

每日一题2023.9.25|LeetCode1367.二叉树中的链表

1367.二叉树中的链表 链接&#xff1a;LeetCode1367.二叉树中的链表 错误分析 其实这道题目思路很简单&#xff1a; 采用前序遍历的方式从根节点开始遍历二叉树&#xff0c;并在遍历的过程中比较与链表节点的值是否相等&#xff0c;如果当前链表节点的值和树节点的值相等&am…

怎样提高外贸业务销售能力

怎样提高外贸业务销售能力 一、市场分析与研究1. 了解目标市场&#xff1a;2. 收集客户信息&#xff1a; 二、产品知识和差异化竞争1. 熟悉产品&#xff1a;2. 差异化竞争&#xff1a; 三、制定销售策略和计划1. 制定销售计划&#xff1a;2. 销售策略&#xff1a; 四、谈判技巧…

Python开发与应用实验2 | Python基础语法应用

*本文是博主对学校专业课Python各种实验的再整理与详解&#xff0c;除了代码部分和解析部分&#xff0c;一些题目还增加了拓展部分&#xff08;⭐&#xff09;。拓展部分不是实验报告中原有的内容&#xff0c;而是博主本人自己的补充&#xff0c;以方便大家额外学习、参考。 &a…

Wespeaker框架训练(1)

1. 数据集准备(Data preparation) 进入wespeaker目录文件/home/username/wespeaker/examples/voxceleb/v2 对run.sh文件进行编辑 vim run.sh 可以看到run.sh里面的配置内容 #数据集下载&#xff0c;解压 stage1 #插入噪音&#xff0c;制作音频文件 stop_stage2 #数据集放置…

如何重装Windows Mirosoft Store

重装Windows Mirosoft Store 如何重装Windows Mirosoft Store呢&#xff1f;如何下载Windows Mirosoft Store呢&#xff1f;Windows Mirosoft Store不见了咋办&#xff1f;Windows 自带软件不见了咋办等等&#xff1f;写在前面 1.文件准备2.安装 如何重装Windows Mirosoft Stor…

Java之序列化的详细解析

3. 序列化 3.1 概述 Java 提供了一种对象序列化的机制。用一个字节序列可以表示一个对象&#xff0c;该字节序列包含该对象的数据、对象的类型和对象中存储的属性等信息。字节序列写出到文件之后&#xff0c;相当于文件中持久保存了一个对象的信息。 反之&#xff0c;该字节…

vue做无缝滚动

类似于这种&#xff1a; 以上截图来自于官网&#xff1a;vue-seamless-scroll 具体使用步骤为&#xff1a; 1:安装 cnpm install vue-seamless-scroll --save  2&#xff1a;引入 <vue-seamless-scroll></vue-seamless-scroll>import vueSeamlessScroll from …

最熟悉的陌生人!Java运算符详解

&#x1f451;专栏内容&#xff1a;Java⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、算术运算符1、四则运算符2、增量运算符3、自增、自减运算符 二、关系运算符三、关系运算符1、逻辑与 &&2、逻辑或|…

【PDF提取页面】使用Adobe Acrobat提取PDF文档的某几个页面另存

▚ 01 使用Adobe Acrobat打开目标文件 ▚ 02 打开 ->页面缩略图Page Thumbnails ▚ 03 右键选择 -> 提取页面 Extract Pages… ▚ 04 选择提取的页数范围 &#x1f341; 一般设置提取页面的初始位置和截至位置即可。 ▚ 05 将提取的目标页面另存为->新PDF文

基于微信小程的流浪动物救助宠物领养平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

05_JavaScript基本语法

1 变量 1.1 标识符 程序开发中&#xff0c;经常需要自定义一些符号来标记一些名称&#xff0c;并赋予其特定的用途&#xff0c;如变量名、函数名等&#xff0c;这些符号都被称为标识符。 定义规则 由大小写字母&#xff08;A-Z,a-z&#xff09;、数字&#xff08;0-9&#…