当前位置:网站首页>异步、邮件、定时三大任务
异步、邮件、定时三大任务
2022-07-03 00:46:00 【奔走的王木木Sir】
异步任务
创建
service
包,在其下创建类AsyncService
伪造正在处理数据,导致线程延时,模拟同步等待。
package com.hxl.service; import org.springframework.stereotype.Service; @Service public class AsyncService { public void hello(){ try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("数据处理中...."); } }
创建
controller
包,在其下创建类AsyncController
package com.hxl.controller; import com.hxl.service.AsyncService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class AsyncController { @Autowired AsyncService asyncService; @RequestMapping("/hello") public String hello(){ asyncService.hello(); return "没毛病了"; } }
访问测试
http://localhost:8080/hello
,此时可以发现网页等待3秒之后会出现没毛病了
的字样。这就是同步等待的情况。为了让用户体验好,先让用户得到消息,然后后台使用多线程的方式处理结果。我们需要加一个注解,这样,Springboot就会开一个线程池,进行调用。
//告诉Spring这是一个异步方法 @Async public void hello(){ try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("数据处理中...."); }
还需要在主启动程序上添加一个注解,让异步注解开启
@EnableAsync //开启异步注解功能 @SpringBootApplication public class SpringbootAsyncApplication { public static void main(String[] args) { SpringApplication.run(SpringbootAsyncApplication.class, args); } }
此时测试发现,网页会瞬间打开,但是后台数据会持续进行,直到数据处理结束。
邮件任务
引入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
在其中可以看到相关的邮件发送依赖
查看
JavaMailSenderImpl
找到之后,看配置文件也就是properties
下的,我们可以看到相关的配置将QQ邮箱里面的服务打开,我们使用IMAP/SMTP服务
配置文件
[email protected] spring.mail.password=自己的QQ授权码 spring.mail.host=smtp.qq.com spring.mail.properties.mail.smtp.ssl.enable=true
测试
package com.hxl; 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; @SpringBootTest class SpringbootAsyncApplicationTests { @Autowired JavaMailSenderImpl mailSender; @Test void contextLoads() { //一个简单的邮件 SimpleMailMessage message = new SimpleMailMessage(); message.setSubject("明天放假"); message.setText("直接10天小长假"); message.setTo("[email protected]"); message.setFrom("[email protected]"); mailSender.send(message); } @Test public void contextLoads2() throws MessagingException { //一个复杂的邮件 MimeMessage mimeMessage = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true); helper.setSubject("明天放假"); helper.setText("<b style='color:red'>你想啥呢</b>",true); //发送附件 helper.addAttachment("1.jpg",new File("文件的路径")); helper.addAttachment("2.jpg",new File("比如:D:\\2.jpg")); helper.setTo("[email protected]"); helper.setFrom("[email protected]"); mailSender.send(mimeMessage); } }
然后就可以看到我们的邮件发送成功了。
定时任务
TaskExecutor接口
TaskScheduler接口
两个注解:
- @EnableScheduling //开启定时功能的注解,在主启动类中
- @Scheduled //什么时候执行
测试
创建
Service
包,创建类ScheduledService
package com.hxl.service; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; @Service public class ScheduledService { //在一个特定的时间执行这个方法 //cron表达式 //秒 分 时 日 月 周几 //下面这句话就是从星期一到星期日,的0秒 @Scheduled(cron = "0 * * * * 0-7") public void hello(){ System.out.println("hello,你被执行了"); } }
在主程序上增加@EnableScheduling 开启定时任务功能
package com.hxl; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; @EnableAsync //开启异步注解功能 @EnableScheduling //开启定时功能的注解 @SpringBootApplication public class SpringbootAsyncApplication { public static void main(String[] args) { SpringApplication.run(SpringbootAsyncApplication.class, args); } }
然后就可以了
cron表达式
cron:https://baike.baidu.com/item/cron/10952601?fr=aladdin
cron的生成:https://www.bejson.com/othertools/cron/
边栏推荐
- [flutter] icons component (load the built-in icon of flutter | display the material design icon completely)
- 465. DFS backtracking of optimal bill balance
- Several cases of recursive processing organization
- tail -f 、tail -F、tailf的区别
- 【AutoSAR 十三 NVM】
- 删除有序链表中重复的元素-II
- 数学建模之线性规划(含MATLAB代码)
- [AUTOSAR twelve mode management]
- 1.12 - Instructions
- In the first half of 2022, there are 10 worth seeing, and each sentence can bring you strength!
猜你喜欢
[AUTOSAR XIII NVM]
数据分析思维分析犯法和业务知识——分析方法(一)
合并K个已排序的链表
(C语言)数据的存储
Test shift right: Elk practice of online quality monitoring
指针初阶(基础)
百度智能云牵头打造智能云综合标准化平台
Teach you JDBC hand in hand -- structure separation
Initial order of pointer (basic)
Reading and writing speed of Reza rz/g2l arm development board storage and network measurement
随机推荐
瑞萨RZ/G2L 处理器简介|框架图|功耗|原理图及硬件设计指南
【日常训练】871. 最低加油次数
[overview of AUTOSAR three RTE]
【AutoSAR 五 方法论】
Lex & yacc & bison & flex configuration problems
Reading and writing speed of Reza rz/g2l arm development board storage and network measurement
有向图的强连通分量
Vulkan is not a "panacea"“
excel表格计算时间日期的差值,并转化为分钟数
[AUTOSAR XIII NVM]
全志A40i/T3如何通过SPI转CAN
Usage of using clause in kingbases alter table
【AutoSAR 八 OS】
RISA rz/g2l processor introduction | frame diagram | power consumption | schematic diagram and hardware design guide
Cordova plugin device obtains the device information plug-in, which causes Huawei to fail the audit
excel IF公式判断两列是否相同
【AutoSAR 十二 模式管理】
matlab查找某一行或者某一列在矩阵中的位置
File operation io-part2
Key detection and sinusoidal signal output developed by Arduino