1、异步任务
为什么需要异步任务?(使用场景)
(1)比如我们在上传资源、下载资源或是邮件发送的时候,都需要等待一段时间,而这对用户的体验不好,我们可以先跳转页面,然后等到资源处理完成之后,返回成功信息!这样即采取了异步任务调度
1、Service层【业务层】
@Service
public class AsyncService {
public void hello(){
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("数据正在处理");
}
}
2、Controller
@RestController
public class AsyncController {
@Autowired
private AsyncService asyncService;
@RequestMapping("/hello")
public String hello(){
asyncService.hello();
return "OK";
}
}
在这个业务流程中,用户点击完之后,需要三秒之后才能进行页面的跳转,用户体验极差,有可能在等待的过程中,用户不知道到底是自己的网络问题,还是服务器处理慢的问题,有可能把界面给关掉,所以为了避免这个情况的发生,我们需要采取异步任务调度,先进行页面跳转,信息处理成功之后再返回成功信息!而SpringBoot中处理这个情况很方便,只需要在service层加入@Async注解
3、添加@Async注解的service层
@Service
public class AsyncService {
@Async
public void hello(){
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("数据正在处理");
}
}
4、当然在熟悉SpringBoot开发的时候,我们知道在业务处理的过程中,添加了新的注解,你就需要在主启动类上 @EnableXXXX,所以在该处我们在主启动类上加上@EnableAsync注解来开启异步功能,这个时候就可以先执行跳转,在进行方法的执行
@EnableAsync
@SpringBootApplication
public class SpringbootTestApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootTestApplication.class, args);
}
}
到这里我们就知道了如何开启异步任务调度,主要的应用场景也知道在哪儿
2、邮件任务
邮件任务:顾名思义,我们听到这个名词的时候,就知道这个是针对邮件发送接收的功能,这个在开发的过程中很常见,我们常常在网站中,变成他们的用户的时候,很多时候都是通过邮箱来进行注册用户,所以这个功能还是值得我们去掌握的
1、进行邮箱-设置-账户-开启服务-POP3/SMTP
2、导入依赖:很多时候,我们在进行某种场景开发的时候都需要导入依赖
<!-- 邮件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
3、在配置文件中配置相关的信息
spring.mail.username=2425540101@qq.com
spring.mail.password=cyxahzfhycwheafj #需要在qq邮箱那边生成授权码
spring.mail.host=smtp.qq.com
# 开启加密验证(QQ独有,163没有)
spring.mail.properties.mail.smtp.ssl.enable=true
4、编写测试类
(1)简单邮件发送
@SpringBootTest
class DemoApplicationTests {
//注入邮件发送
@Autowired
JavaMailSenderImpl javaMailSender;
@Test
void contextLoads() {
//一个简单的邮件
SimpleMailMessage simpleMessage = new SimpleMailMessage();
simpleMessage.setSubject("我是标题");//设置邮件主题
simpleMessage.setText("我是正文");//邮件内容
simpleMessage.setTo("2423154611@qq.com");//发给谁
simpleMessage.setFrom("2425540101@qq.com");//邮件来自谁
javaMailSender.send(simpleMessage);
}
}
(2)复杂邮件发送
@Test
void contextLoads2() throws MessagingException {
//一个复杂的邮件
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
//组装 开启
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
//正文
helper.setSubject("邮件·Plus");
helper.setText("<p style='color:red'>我可以使用html</p>",true);
//附件
helper.addAttachment("test.jpg",new File("C:\\Users\\Administrator\\Desktop\\1.jpg"));
helper.setTo("260474420@qq.com");//发给谁
helper.setFrom("260474420@qq.com");//邮件来自谁
javaMailSender.send(mimeMessage);
}
这就实现了简单的邮件发送功能,当然这是我们在进行测试的过程,在开发过程中,我们需要对方法进行封装,做到通过我们注入,实现对某个用户,发送某些内容,提高系统的灵活性!!!