异步任务
在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的;但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在Spring 3.x之后,就已经内置了@Async
来完美解决这个问题。
注解使用
在SpringBoot里,需要给启动类添加@EnableAsync
来开启异步注解。
使用@Async
异步注解:
@Service
public class AsyncService {
@Async // 该注解表明这是一个异步任务
public void hello(){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("处理数据中...");
}
}
同步任务
项目开发中经常需要执行一些定时任务
,比如需要在每天凌晨时候,分析一次前一天的日志信息,统计前一天的商品销量等。Spring为我们提供了异步执行任务调度的方式,提供TaskExecutor
、TaskScheduler
接口。
要使用同步任务,首先需要了解SpringTask以及Cron表达式
注解使用
在SpringBoot里,需要给启动类添加@EnableScheduling
来开启定时任务注解。
使用@Scheduled
定时任务注解:
@Service
public class ScheduleService {
@Scheduled(cron = "0/4 * * * * MON-SAT") //每4秒执行一次
public void hello(){
System.out.println("hello...");
}
}
邮件任务
邮件任务在项目中也比较常见,比如用户注册,我们可以通过邮件的方式确认注册信息(验证码),注册成功了,发送一些有关的信息等等。
原理
[email protected]
要给[email protected]
发送邮件,它们不是直接交互的。而是lcy要登录自己的邮箱服务器,登进来以后以这个账户为名,给jyqc发邮件。而给jyqc发邮件,也是qq邮箱服务器发给163邮箱服务器,163邮箱服务器再发给jyqc的。
一、依赖引入及自动配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
自动配置
配置文件内容
二、开启邮箱服务
以QQ邮箱为例
,需要开启这些服务:
然后我们就可以点击生成授权码,在yml
配置文件中使用。
三、配置yml
主要需要配置邮箱的账号
、密码(授权码)
、邮箱主机地址
spring:
mail:
username: 123456789@qq.com # 邮箱
password: vzydizxcystfkwefi # 授权码
host: smtp.qq.com # QQ邮箱主机地址
default-encoding: utf-8 # 编码,默认UTF-8
properties:
mail:
smtp:
ssl:
enable: true # 安全的ssl链接
四、简单邮件发送
注入JavaMailSenderImpl
。
@Autowired
private JavaMailSenderImpl mailSender;
@Test
public void test(){
// 简单邮件信息对象
SimpleMailMessage message = new SimpleMailMessage();
// 邮件标题
message.setSubject("寻宝游戏注册验证码:");
// 邮件内容
message.setText("验证码:123456");
// 邮件接收方
message.setTo("[email protected]");
// 邮件发送方
message.setFrom("[email protected]");
// 发送
mailSender.send(message);
}
五、复杂邮件发送
@Test
public void test1(){
try {
// 复杂的消息邮件对象
MimeMessage mimeMessage = mailSender.createMimeMessage();
// 参数2:是否上传文件
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
// 邮件标题
helper.setSubject("寻宝游戏注册");
// 设置内容 - 参数2:是否使用html格式
helper.setText("<em style='color:red'>注册成功!请阅读附件!</em>",true);
// 邮件接收方
helper.setTo("[email protected]");
// 邮件发送方
helper.setFrom("[email protected]");
//上传文件
helper.addAttachment("1.jpg",new File("D:\\1.jpg"));
helper.addAttachment("2.jpg",new File("D:\\2.jpg"));
// 发送
mailSender.send(mimeMessage);
} catch (MessagingException e) {
e.printStackTrace();
}
}