一、异步任务
在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的;但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在Spring 3.x之后,就已经内置了@Async来完美解决这个问题。
我们可以自己创建一个多线程去做异步处理,但这未免也太麻烦了,Spring的注解可以帮我们做这个事情。
两个注解:
@EnableAysnc、@Aysnc
@EnableAysnc加在Springboot启动类上方,表示开启注解式的异步任务
@Aysnc加在方法上方,表明此方法为一个异步方法,当方法被调用时会创建一个线程执行此方法。
二、定时任务
项目开发中经常需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息。Spring为我们提供了异步执行任务调度的方式,提供TaskExecutor 、TaskScheduler 接口。
@EnableScheduling //加在启动类上方,开启基于注解的定时任务@Scheduled(cron = "* * * * * *")//加在方法上方表示此方法为一个定时任务。
这里@Scheduled参数中的cron表达式类似于Linux中的Crontab定时任务
三、邮件任务
邮件发送需要引入spring-boot-starter-mail
Spring Boot 自动配置MailSenderAutoConfiguration
定义MailProperties内容,配置在application.yml中
自动装配JavaMailSender
测试邮件发送
引入starter之后,要从配置文件中配置邮箱的账号,密码,邮箱的host服务器。
邮箱的host服务器在每个邮箱的设置里,以QQ邮箱为例
![](https://i-blog.csdnimg.cn/blog_migrate/8e19c5f8590e8e45bb336dbce9780b26.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c590e593ee8eacc8d8c679aba82f00fc.png)
所以在配置文件中需要
spring.mail.username=XXXXXXXXX@qq.com
spring.mail.password=gtstkoszjelabijb
spring.mail.host=smtp.qq.com
spring.mail.properties.mail.smtp.ssl.enable=true
password并不是你邮箱的明文密码,而是在邮箱中开启服务时给的密钥授权码。
随后将Springboot容器中的组件注入使用即可
@Autowired
JavaMailSenderImpl mailSender;
@Test
public void contextLoads() {
SimpleMailMessage message = new SimpleMailMessage();
//邮件设置
message.setSubject("通知-今晚开会");
message.setText("今晚7:30开会");
message.setTo("17512080612@163.com");
message.setFrom("534096094@qq.com");
mailSender.send(message);
}
@Test
public void test02() throws Exception{
//1、创建一个复杂的消息邮件
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
//邮件设置
helper.setSubject("通知-今晚开会");
helper.setText("<b style='color:red'>今天 7:30 开会</b>",true);
helper.setTo("17512080612@163.com");
helper.setFrom("534096094@qq.com");
//上传文件
helper.addAttachment("1.jpg",new File("C:\\Users\\lfy\\Pictures\\Saved Pictures\\1.jpg"));
helper.addAttachment("2.jpg",new File("C:\\Users\\lfy\\Pictures\\Saved Pictures\\2.jpg"));
mailSender.send(mimeMessage);
}