一、异步任务
1、模拟一个等待服务器处理数据的过程(浏览器会等待服务器处理完数据,才会获得响应)
@Service
public class AsynService {
public void opeData(){
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("数据处理完成!");
}
}
@RestController
public class AsynController {
@Autowired
private AsynService service;
@GetMapping("/hello")
public String hello(){
//这时,线程睡眠3s,浏览器白屏,等待服务器处理结果
service.opeData();
return "ok";
}
}
2、使用springboot中的异步任务
- 在需要开启多线程的地方,添加@Async注解
@Async //使用该类时,使用异步任务
@Service
public class AsynService {
public void opeData(){
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("数据处理完成!");
}
}
- 在主启动类上,开启异步任务的支持@Enable
@SpringBootApplication
@EnableAsync //开启异步任务的支持
public class TaskApplication {
public static void main(String[] args) {
SpringApplication.run(TaskApplication.class, args);
}
}
二、邮件任务
1、开启邮件任务的启动器
<!--邮件启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2、修改springboot对于邮件的默认配置
spring.mail.username=729229951@qq.com
#从QQ邮箱中的开启SMTP服务中获取
spring.mail.password=odeglwitfkeobegb
#发送的主机,发给qq邮箱
spring.mail.host=smtp.qq.com
#开启加密验证(只有QQ邮箱需要)
spring.mail.properties.mail.smtp.ssl.enable=true
从QQ邮箱中的开启SMTP服务中获取密码
3、使用核心类 JavaMailSenderImpl
@Autowired
private JavaMailSenderImpl sender;
/*
* 发送一个简单的邮件
* */
@Test
void contextLoads() {
//设置一个邮件对象
SimpleMailMessage mailMessage = new SimpleMailMessage();
//邮件主题
mailMessage.setSubject("邮件主题");
//邮件内容
mailMessage.setText("邮件内容");
//设置发件人和收件人
mailMessage.setTo("729229951@qq.com");
mailMessage.setFrom("729229951@qq.com");
//发送该邮件
sender.send(mailMessage);
}
/*
* 发送一个复杂的邮件
* */
@Test
void contextLoads2() throws MessagingException {
//设置一个邮件对象(复杂的)
MimeMessage mimeMessage =sender.createMimeMessage();
//组装该邮件对象(true,表示支持多文件)
MimeMessageHelper helper=new MimeMessageHelper(mimeMessage,true);
//标题+正文
helper.setSubject("标题");
//开启解析html标签
helper.setText("<h1>邮件内容</h1>",true);
//附件
helper.addAttachment("课程表.png",new File("E:\\IDEA_PROJECT\\task\\src\\main\\课程表.png"));
//设置发件人和收件人
helper.setTo("729229951@qq.com");
helper.setFrom("729229951@qq.com");
sender.send(mimeMessage);
}
三、定时任务
1、两个重要注解
@EnableScheduling //开启定时任务功能
@Scheduled //什么时候执行
- 主启动类上,开启定时任务的支持
@EnableScheduling //开启定时任务的支持
- 在某一个方法上使用@Scheduled,说明该方法在某一时间被调度
/*
* @Scheduled:任务调度,接收一个cron表达式
* */
@Scheduled(cron = "0/2 * * * * ?")
public void sayHello(){
//每隔两秒,该方法就会被执行一次
System.out.println("hello...");
}
2、cron表达式
/*
* 使用cron表达式,来确定何时调度
* 秒 分 时 日 月 周
*
* 0/2 * * * * ?
* 任意星期,所有月,所有日,所有时,所有分,的每隔两秒执行
*
* 30 0/5 10,18 * * ?
* 任意星期,所有月,所有日,10点和18点,每隔五分钟 的30秒时执行
*/