一、异步任务

两个注解:
@Async 在需要异步执行的方法上标注注解
@EnableAsync 在主类上标注开启异步任务支持

二、定时任务(推荐使用saturn)

项目开发中经常需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息。Spring为我们提供了异步执行任务调度的方式,提供TaskExecutor 、TaskScheduler 接口。
两个注解:
@EnableScheduling 标注在主类,开启对定时任务支持
@Scheduled 标注在执行的方法上,并制定cron属性

cron表达式:
second(秒), minute(分), hour(时), day of month(日), month(月), day of week(周几).
0 0/5 14,18 * * ? 每天14点整,和18点整,每隔5分钟执行一次
0 15 10 ? * 1-6 每个月的周一至周六10:15分执行一次
0 0 2 ? * 6L 每个月的最后一个周六凌晨2点执行一次
0 0 2 LW * ? 每个月的最后一个工作日凌晨2点执行一次
0 0 2-4 ? * 1#1 每个月的第一个周一凌晨2点到4点期间,每个整点都执行一次;

字段 允许值 允许的特殊字符
0-59 , - * /
0-59 , - * /
小时 0-23 , - * /
日期 1-31 , - * ? / L W C
月份 1-12 , - * /
星期 0-7或SUN-SAT 0,7是SUN , - * ? / L C #
特殊字符 代表含义
, 枚举
- 区间
* 任意
/ 步长
? 日/星期冲突匹配
L 最后
W 工作日
C 和calendar联系后计算过的值
# 星期,4#2,第2个星期四

三、 邮件任务

  • 邮件发送需要引入 spring-boot-starter-mail
  • SpringBoot自动配置MailSenderAutoConfiguration
  • 定义MailProperties内容,配置在application.yml中
  • 自动装配JavaMailSender
  • 测试邮件发送
  1. spring.mail.username=邮箱用户名
  2. spring.mail.password=邮箱密码或授权码
  3. spring.mail.host=smtp.qq.com

image.png

  1. @Autowired
  2. private JavaMailSenderImpl javaMailSender;
  3. /**
  4. * 普通邮件发送
  5. */
  6. public void send(){
  7. SimpleMailMessage message = new SimpleMailMessage();
  8. //设置主题和内容
  9. message.setSubject("今天开会");
  10. message.setText("555开会,不要迟到");
  11. //设置发送方和接收方
  12. message.setFrom("19****@qq.com");
  13. message.setTo("132****@163.com");
  14. javaMailSender.send(message);
  15. }
  16. /**
  17. * 发送邮件带附件
  18. * @throws Exception
  19. */
  20. public void sendWithAttactment() throws Exception{
  21. MimeMessage message = javaMailSender.createMimeMessage();
  22. //multipart=true
  23. //开启对内联元素和附件的支持
  24. MimeMessageHelper helper = new MimeMessageHelper(message,true);
  25. helper.setSubject("今天开会");
  26. //html=ture
  27. //设置content type=text/html,默认为text/plain
  28. helper.setText("<b style='color:red'>今晚开会,不要迟到</b>",true);
  29. helper.setFrom("19****@qq.com");
  30. helper.setTo("132****@163.com");
  31. //设置附件
  32. helper.addAttachment("1.jpg",new File("C:\\Users\\banpu\\Desktop\\1.jpg"));
  33. helper.addAttachment("123.xls",new File("C:\\Users\\banpu\\Desktop\\123.xls"));
  34. javaMailSender.send(message);
  35. }
  36. }

复杂邮件发送
带有附件或html页面的邮件
两个设置
new MimeMessageHelper(message,true) 设置multipart=true,开启对内联元素和附件的支持
helper.setText("xxxx",true) html=ture,设置content type=text/html,默认为text/plain