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

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

异步任务

  1. 启动类添加@EnableAsync注解,代表启用异步
  2. service处理类方法添加@Async,标识该方法为异步处理

定时任务

启动任务调度

启动类添加@EnableScheduling注解,表示开启任务调度

编写任务调度类运行

@Component
public class TestTask {
    //表示每10秒执行一次
    @Scheduled(cron = "0/10 * * * * ?")
    public void testScheduled(){
        System.out.println(new Date());
    }
}

cron基本学习

cron一共为六个参数,分别为:秒 分 时 日 月 周几
取值如下:
字段 允许值 允许的特殊字符
秒(Seconds) 0~59的整数 , - * / 四个字符
分(Minutes 0~59的整数 , - * / 四个字符
小时(Hours 0~23的整数 , - * / 四个字符
日期(DayofMonth 1~31的整数(但是你需要考虑你月的天数) ,- * ? / L W C 八个字符
月份(Month 1~12的整数或者 JAN-DEC , - * / 四个字符
星期(DayofWeek 1~7的整数或者 SUN-SAT (1=SUN) , - * ? / L C # 八个字符
年(可选,留空)(Year 1970~2099 , - * / 四个字符

cron在线生成

https://www.matools.com/cron

邮件发送

依赖添加

<!--邮件依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

yaml文件配置

spring:
  mail:
    username: 1******9@qq.com
    password: k******b
    # 配置 SMTP 服务器地址
    host: smtp.qq.com
    # 默认的邮件编码为UTF-8
    default-encoding: UTF-8
    # 端口号465或587
    #port: 587  默认不指定
    # 配置SSL 加密工厂
    properties:
      mail:
        smtp:
          socketFactoryClass: javax.net.ssl.SSLSocketFactory
        #表示开启 DEBUG 模式,这样,邮件发送过程的日志会在控制台打印出来,方便排查错误
        debug: true

端口号指定

126邮箱SMTP服务器地址:smtp.126.com,端口号:465或者994
163邮箱SMTP服务器地址:smtp.163.com,端口号:465或者994
yeah邮箱SMTP服务器地址:smtp.yeah.net,端口号:465或者994
qq邮箱SMTP服务器地址:smtp.qq.com,端口号465或587*

发送简单的文本邮件

//注入邮件发送对象
@Autowired
private JavaMailSender javaMailSender;

public void sendMail(){
    //构建一个邮件对象
    SimpleMailMessage smm=new SimpleMailMessage();
    //主题
    smm.setSubject("这是一封学习的测试邮件");
    // 设置邮件发送者,这个跟application.yml中设置的要一致
    smm.setFrom("1******9@qq.com");
    //邮件接收者,多个以逗号隔开
    smm.setTo("l******u@163.com","9******1@qq.com");
    //邮件抄送人
    smm.setCc("1******9@qq.com");
    //邮件隐秘抄送人
    //smm.setBcc("");
    //设置邮件的发送日期
    smm.setSentDate(new Date());
    //邮件正文
    smm.setText("只要学不死,就往死里学!");
    javaMailSender.send(smm);
}

发送带附件的邮件

public void sendMail(){
    //构建一个复杂邮件对象
    MimeMessage mm=javaMailSender.createMimeMessage();
    try {
        //创建设置参数的对象,true表示构建一个可以带附件的邮件
        MimeMessageHelper mmh=new MimeMessageHelper(mm,true);
        //主题
        mmh.setSubject("这是一封学习带附件的测试邮件");
        // 设置邮件发送者,这个跟application.yml中设置的要一致
        mmh.setFrom("1******9@qq.com");
        //邮件接收者,多个以逗号隔开
        mmh.setTo(new String[]{"l******u@163.com","1******9@qq.com"});
        //邮件抄送人
        mmh.setCc("1******9@qq.com");
        //设置邮件的发送日期
        mmh.setSentDate(new Date());
        //邮件正文
        mmh.setText("只要学不死,就往死里学!");
        // 第一个参数是自定义的名称,后缀需要加上,第二个参数是文件的位置
        mmh.addAttachment("jdkApi.zip",new File("D:\\lwp\\API.zip"));
        javaMailSender.send(mm);
    } catch (MessagingException e) {
        e.printStackTrace();
    }
}

发送主题内容带图片

//邮件正文,true代表这是一个html文本
mmh.setText("<p>只要学不死,就往死里学!</p> <img src='cid:cs' />",true);
//第一个参数和-->img的src="cid:cs"必须一一对应
mmh.addInline("cs",new FileSystemResource(new File("D:\\lwp\\cs.jpg")));

使用Thymeleaf作为邮件模板

添加Thymeleaf依赖

<!--Thymeleaf依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

配置模板

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
      h1 {
        color: red;
      }
      h2 {
        color: yellow
      }
    </style>
</head>
<body>
  <h1>只要学不死,就往死里学!</h1>
  <h2>啊哈哈哈哈哈哈</h2>
  <h1>动态数据:<p th:text="${text}"></p></h1>
</body>
</html>

邮件发送

//注入邮件发送对象
@Autowired
private JavaMailSender javaMailSender;

//template模板引擎
@Autowired
private TemplateEngine templateEngine;

public void sendMail(){
    //构建一个复杂邮件对象
    MimeMessage mm=javaMailSender.createMimeMessage();
    try {
        //创建设置参数的对象,true表示构建一个可以带附件的邮件
        MimeMessageHelper mmh=new MimeMessageHelper(mm,true);
        //主题
        mmh.setSubject("这是一封学习使用Thymeleaf模板的测试邮件");
        // 设置邮件发送者,这个跟application.yml中设置的要一致
        mmh.setFrom("1******9@qq.com");
        //邮件接收者,多个以逗号隔开
        mmh.setTo(new String[]{"l******u@163.com"});

        //创建对象动态为模板传入数据
        //Context是导这个包import org.thymeleaf.context.Context;
        Context context=new Context();
        Map<String, Object> variables=new HashMap<>();
        //map的key和模板中绑定的变量对应
        variables.put("text","这是一个自定义动态数据");
        context.setVariables(variables);
        //获取thymeleaf的html模板
        //参数1:相对路径为resources/templates 自定义的mail文件夹下的mail.html
        //参数2:动态数据传入
        String emailContent=templateEngine.process("/mail/mail",context);
        //邮件正文,第二个参数必须设置为true,表式为html文本
        mmh.setText(emailContent,true);
        javaMailSender.send(mm);
    } catch (MessagingException e) {
        e.printStackTrace();
    }
}
posted @ 2021-07-09 22:42  幸运刘  阅读(49)  评论(0)    收藏  举报