异步任务、邮件任务、定时任务

一、异步任务

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中的异步任务

  1. 在需要开启多线程的地方,添加@Async注解
@Async              //使用该类时,使用异步任务
@Service
public class AsynService {

    public void opeData(){
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("数据处理完成!");
    }
}
  1. 在主启动类上,开启异步任务的支持@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          //什么时候执行
  1. 主启动类上,开启定时任务的支持
@EnableScheduling           //开启定时任务的支持
  1. 在某一个方法上使用@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秒时执行
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值