springboot+多线程实现邮件发送(定时任务)

一:实现一个简单的异步任务

1.不适用spring自带的异步注解

service层的AsyncService 类

package com.example.demo.service;

import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

@Service
public class AsyncService {

    //多线程的简单列子
   
    public void heelo(){
        try{
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("数据正在处理......");
    }
}

controller层的

package com.example.demo.controller;

import com.example.demo.service.AsyncService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class AsynController {
    @Autowired
    AsyncService asyncService;

    @RequestMapping("/hello")
    @ResponseBody
    public String hello(){
        asyncService.heelo();
        return "我爱你";
    }
}

页面会等待3秒后出现”我爱你“

2.使用spring自带的@Async列子,页面会先出现“我爱你”
在启动类中增加@EnableAsync

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;


@EnableAsync //开启异步注解功能
@SpringBootApplication
public class Demo8Application {

    public static void main(String[] args) {
        SpringApplication.run(Demo8Application.class, args);
    }

}

@Service
public class AsyncService {

    //多线程的简单列子
    @Async
    public void heelo(){
        try{
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("数据正在处理......");
    }
}

二:spingboot实现邮件发送

1.导入javax.mail

<!--        导入javax.mail -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

2.yaml文件中进行配置

spring:
  mail:
    username: 2032764143@qq.com
    password: ftswigcyobfhfcgd
    host: smtp.qq.com
    properties:
      mail:
        smtl:
          ssl:
            enable: true

3.在测试类尝试发送邮件

    @Autowired
    JavaMailSenderImpl mailSender;


    @Test
    void contextLoads() {
        //一个简单的邮件
        SimpleMailMessage mailMessage = new SimpleMailMessage();
        //主题
        mailMessage.setSubject("蓝桥杯大赛官方通知");
        //内容
        mailMessage.setText("您好!参赛者,由于您长时间没有刷题,导致您的蓝桥杯参赛资格被取消,您的" +
                "参赛费用不会被退回!希望你再接再厉!");
        //发送者
        mailMessage.setFrom("2032764143@qq.com");
//        mailMessage.setTo("2032764143@qq.com");
        //接收者
        mailMessage.setTo("2311053076@qq.com");
        mailSender.send(mailMessage);

    }

实现一个能发送html和图片的代码

 @Test
    void contextLoads1() throws MessagingException {
        //一个复杂的邮件
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        //组装
        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage,true);
        mimeMessageHelper.setSubject("努力学习");
        mimeMessageHelper.setText("<p style='color:red>花堪须折直须折,莫待无花空折枝.</p>",true);
        mimeMessageHelper.addAttachment("1.png",new File("C:\\Users\\86151\\Pictures\\好看的图片\\登陆\\1.png"));
        mimeMessageHelper.setFrom("2032764143@qq.com");
        mimeMessageHelper.setTo("2032764143@qq.com");
        mailSender.send(mimeMessage);



    }

将上面的代码编写成一个类

/*
    * @param html
    * @throws
    * @param subject,text
    * */

    public void sendMail(Boolean html,String subject,String text) throws MessagingException {
        //一个复杂的邮件
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        //组装
        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage,html);
        mimeMessageHelper.setSubject(subject);
        mimeMessageHelper.setText(text,true);
        mimeMessageHelper.addAttachment("1.png",new File("C:\\Users\\86151\\Pictures\\好看的图片\\登陆\\1.png"));
        mimeMessageHelper.setFrom("2032764143@qq.com");
        mimeMessageHelper.setTo("2032764143@qq.com");
        mailSender.send(mimeMessage);
    }

三:定时任务

1.定时任务需要两个注解
@EnableScheduling // 开启定时功能的注解,放到启动类里面
@Scheduled //什么时候执行
cron表达式
在这里插入图片描述
在这里插入图片描述
建立一个ScheduledService类

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

@Service
public class ScheduledService {

    //cron表达式
    /**
     * 秒 分 时 日 月 周几
     * 我的当前时间时15:55分
     * ?代表你不确定现在是星期几
     * 0-7代表每天都执行
     *   0 56 15 * * ? 每天的15点56分0秒执行一次
     *   0 0/5 15 10,18 * ? 每天10点和18点,每隔五分种执行一次
     *   
     *
     * */

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


版权声明:本文为qq_51269815原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。