当前位置:网站首页>异步、邮件、定时三大任务
异步、邮件、定时三大任务
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包,在其下创建类AsyncControllerpackage 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包,创建类ScheduledServicepackage 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/
边栏推荐
- [AUTOSAR nine c/s principle Architecture]
- Cordova plugin device obtains the device information plug-in, which causes Huawei to fail the audit
- RISA rz/g2l processor introduction | frame diagram | power consumption | schematic diagram and hardware design guide
- Web2.0的巨头纷纷布局VC,Tiger DAO VC或成抵达Web3捷径
- Arduino开发之按键检测与正弦信号输出
- Key detection and sinusoidal signal output developed by Arduino
- Rust string slicing, structs, and enumeration classes
- 【AutoSAR 五 方法论】
- 【AutoSAR 四 BSW概述】
- Leetcode-1964: find the longest effective obstacle race route to each position
猜你喜欢

Matlab saves the digital matrix as geospatial data, and the display subscript index must be of positive integer type or logical type. Solve the problem

Vulkan practice first bullet

测试右移:线上质量监控 ELK 实战

Liad: the consumer end of micro LED products is first targeted at TVs above 100 inches. At this stage, it is still difficult to enter a smaller size
![[AUTOSAR + IO Architecture]](/img/cf/9ea42b50bed298c0546764b63bd957.png)
[AUTOSAR + IO Architecture]

数学建模之线性规划(含MATLAB代码)

The difference between tail -f, tail -f and tail

【AutoSAR 三 RTE概述】

First hand evaluation of Reza electronics rz/g2l development board

excel IF公式判断两列是否相同
随机推荐
用Go+绘制爱心给心爱的她表白
[AUTOSAR 11 communication related mechanism]
2022.2.14 resumption
Tensorflow 2.x(keras)源码详解之第十五章:迁移学习与微调
Several cases of recursive processing organization
2022 list of manufacturers of Chinese 3D vision enterprises (guided positioning and sorting scenes)
Illustrated network: what is virtual router redundancy protocol VRRP?
[shutter] image component (cached_network_image network image caching plug-in)
tail -f 、tail -F、tailf的区别
Leetcode-849: maximum distance to the nearest person
递归处理组织的几种情况
[AUTOSAR + IO Architecture]
【C语言】分支和循环语句(上)
无向图的割点
Key detection and sinusoidal signal output developed by Arduino
Usage of using clause in kingbases alter table
RK3568开发板评测篇(二):开发环境搭建
Solve the cache problem of reactnative using WebView
Thread start and priority
Baidu AI Cloud takes the lead in building a comprehensive and standardized platform for smart cloud