异步处理,邮件发送,定时任务异步任务

测试代码

Controller层

@RestController
public class HelloController {

    @Autowired
    private AsyncService asyncService;

    @RequestMapping("/hello")
    public String hello(){
        asyncService.test();
        return "ok";
    }
}
@Service
public class AsyncService {

    public void test(){
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("数据正在处理");
    }
}

我们就可以去测试了,我们需要等待三秒之后前台才能接收到数据,影响用户体验,我们可以先把数据提交到前台,然后再处理数据,一般开启线程解决,而在SpringBoot中我们只需要简简单单的两个注解就可以实现预想的效果

主类添加@EnableAsync表示启用异步处理功能

方法添加@Async注解,告诉Spring这是一个异步处理方法

@Service
public class AsyncService {

    @Async  //告诉Spring这是一个异步方法
    public void test(){
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("数据正在处理");
    }
}
邮件任务

在原来的阶段,我们发送邮件需要自己导包写入一大堆配置么人在SpringBoot中我们只需要简简单单的几行代码就能实现我们的需求

导入依赖(启动器)

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

在SpringBoot原理初探中,我们知道SpringBoot的核心是自动装配,每个功能都有自动装配类和属性类,所以这个也不例外,双击Shift查找MailAutoConfig,找到自动装配类

可以发现已经有定义好的JavaSenderImpl,我们可以直接拿来用

@SpringBootTest
class Springboot08AsyncMailTimingprojectApplicationTests {

    @Autowired
    private JavaMailSenderImpl mailSender;

    @Test
    void contextLoads() {
        //一个简单的邮件测试
        SimpleMailMessage mailMessage = new SimpleMailMessage();
        //设置主题,内容,从哪来,到哪去
        mailMessage.setSubject("这是测试邮件");
        mailMessage.setText("苏绪南,你好呀!");
        mailMessage.setFrom("1429473191@qq.com");
        mailMessage.setTo("1429473191@qq.com");

        mailSender.send(mailMessage);
        System.out.println("发送成功");
    }
    
    @Test
    void Test02() throws MessagingException {
        //一个复杂邮件测试
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
        helper.setText("<p style='color: red;'>苏绪南你好啊</p>",true);
        helper.setSubject("这是一封复杂邮件");
        helper.setTo("1429473191@qq.com");
        helper.setFrom("1429473191@qq.com");
        //添加一个附件
        helper.addAttachment("1.jpg",new File("D:\\图片\\。。。\\1.jpg"));
        mailSender.send(mimeMessage);
    }
}
定时任务

定时任务SpringBoot中已经内置了无需我们导入依赖,定时任务相关的两个接口

TaskScheduler  //任务调度者
TaskExecutor  //任务执行者

我们还需要两个注解

@EnableScheduling  开启定时任务功能的注解

@Scheduled 什么时候执行

cron表达式

首先我们在主类标注@EnableScheduling  注解开启定时任务功能的注解

然后创建ScheduledService

@Service
public class ScheduledService {
    //cron 表达式

    //秒 分 时 日 月 0-7(周一到周日,0和7都表示周日)

    /**     30 15 10 * * ? 每天10点15分30秒跑一次
     *      30 0/5 10,18 * * ? 每天10点和18点每隔5分钟跑一次
     *      0 15 10 ? * 1-6  每个月的周一到周六 10点15分就会跑一次
     *              注意  ? 只能用在日期和星期的位置
     */


    @Scheduled(cron = "0 59 * * * ?")
    public void test(){
        System.out.println("hello,你被执行了");
    }
}