10、springboot中的任务:异步任务、邮件发送、定时任务

SpringBoot任务:

一、异步任务:

1、定义service

@Service
@Async
public class SyncService {
    public void demo(){
        try {
            // 模拟网站延迟的情况
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("程序正在处理~");
    }
}

2、编写controller,在请求中调用service

@Autowired
SyncService syncService;
@RequestMapping(
"/test") public String test() { syncService.demo(); // 程序到这里会停止三秒 return "ok!"; }

3、测试

  请求: localhost:8080/test  这里是模拟网站的延迟情况,如果延迟三秒钟,那么网站就会一直转圈圈,对于用户的体验很不好,所以:

在Service的类上或者方法中使用 @Async ,并在主入口(启动类)上使用 @EnableAsync 开启异步任务,网页会很快刷新、

二、邮件发送


导入依赖:

<!--邮件发送-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
    <version>2.2.6.RELEASE</version>
</dependency>
<!--thymeleaf模板引擎-->
<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring5</artifactId>
</dependency>
<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-java8time</artifactId>
</dependency>

在properties中配置自己的邮件信息:

 1 spring.mail.username=1820712542@qq.com
 2 spring.mail.password=ehhtnaacqihleaai
 3 # 设置SMTP服务主机地址
 4 spring.mail.host=smtp.qq.com
 5 # QQ邮箱特别要设置的ssl加密规则
 6 spring.mail.properties.mail.smtp.ssl.enable=true
 7 # 默认编码(默认)
 8 spring.mail.default-encoding=utf-8
 9 # SMTP服务器使用的协议(默认)
10 # spring.mail.protocol=smtp

1、简单邮件发送

 // 邮件发件人
 @Resource
 JavaMailSenderImpl mailSender;
 @Test
 void test1() {
     SimpleMailMessage message = new SimpleMailMessage();
     // 设置邮件发件人
     message.setFrom("1820712542@qq.com");
     // 设置邮件收件人
     message.setTo("zhang_zhixi@qq.com");
     // 设置邮件主题
     message.setSubject("这是一封来自未来的邮件");
     // 设置邮件发送的内容
     message.setText("小伙纸,你能成大事~");
     // 发送
     mailSender.send(message);
 }

2、复杂(附件)邮件发送

// 邮件发件人
    @Resource
    JavaMailSenderImpl mailSender;
    
    @Test
    void test2() throws MessagingException, ParseException {
        // 复杂的邮件发送
        MimeMessage message = mailSender.createMimeMessage();
        // 组装(true:支持内联元素和附件*的多部分消息)
        MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");

        // 设置邮件发件人
        helper.setFrom("1820712542@qq.com");
        // 设置邮件收件人
        helper.setTo(new String[]{"zhang_zhixi@qq.com"});
        // 设置邮件发送时间
        //helper.setSentDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2021-2-1 11:20:00"));
        // 设置邮件发送主题
        helper.setSubject("查收今天的第二封邮件~");
        // 正文
        helper.setText("<p style='color:red'>加油,干饭人!</p>", true);
        // 发送附件
        helper.addAttachment("demo.jpg", new File("C:\Users\华信彭于晏\Pictures\壁纸\demo.jpg"));
        // 发送
        mailSender.send(message);
    }

3、表单提交邮件,实现发送

表单信息:

1 <form th:action="@{/email}" method="post">
2     发送方邮件地:<input type="email" th:name="email"><br>
3     收件方邮件地:<input type="email" th:name="toEmail"><br>
4     邮件主题:<input type="text" th:name="subject"><br>
5     邮件内容:<input type="text" th:name="text"><br>
6     <input type="submit" th:value="提交">
7 </form>

controller发送请求:

 1 @Controller
 2 public class EmailSendController {
 3 
 4     @RequestMapping("/")
 5     public String toIndex() {
 6         return "index";
 7     }
 8 
 9     @Autowired
10     JavaMailSenderImpl mailSender;
11 
12     @RequestMapping("/email")
13     @ResponseBody
14     public String toEmailSend(HttpServletRequest request) throws MessagingException {
15         String email = request.getParameter("email");
16         System.out.println(email);
17         String toEmail = request.getParameter("toEmail");
18         System.out.println(toEmail);
19         String subject = request.getParameter("subject");
20         System.out.println(subject);
21         String text = request.getParameter("text");
22         System.out.println(text);
23 
24         // 复杂的邮件发送
25         MimeMessage message = mailSender.createMimeMessage();
26         // 组装(true:支持内联元素和附件*的多部分消息)
27         MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
28 
29         // 设置邮件发件人
30         helper.setFrom(email);
31         // 设置邮件收件人
32         helper.setTo(toEmail);
33         // 设置邮件发送主题
34         helper.setSubject(subject);
35         // 正文
36         helper.setText("<p style='color:red'>" + text + "</p>", true);
37 
38         // 设置邮件发送时间
39         //helper.setSentDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2021-2-1 11:20:00"));
40         // 发送附件
41         // helper.addAttachment("demo.jpg", new File("C:\Users\华信彭于晏\Pictures\壁纸\demo.jpg"));
42 
43         // 发送
44         mailSender.send(message);
45         return "邮件发送成功~可能有延迟,请稍后进行查看!";
46     }
47 }

 

 三、定时任务


TaskScheduler     //任务调度程序
TaskExecutor	   //任务执行者
@EnableScheduling   //开启定时功能的注解,放在主入口
@Scheduled	   //什么时候执行

 在方法上面加上@Scheduled(cron = "0 43 14 * * ?")并加上相应的cron表达式即可 

cron表达式在线生成器

常用表达式例子

  (1)0/2 * * * * ?   表示每2秒 执行任务

  (1)0 0/2 * * * ?    表示每2分钟 执行任务

  (1)0 0 2 1 * ?   表示在每月的1日的凌晨2点调整任务

  (2)0 15 10 ? * MON-FRI   表示周一到周五每天上午10:15执行作业

  (3)0 15 10 ? 6L 2002-2006   表示2002-2006年的每个月的最后一个星期五上午10:15执行作

  (4)0 0 10,14,16 * * ?   每天上午10点,下午2点,4点 

  (5)0 0/30 9-17 * * ?   朝九晚五工作时间内每半小时 

  (6)0 0 12 ? * WED    表示每个星期三中午12点 

  (7)0 0 12 * * ?   每天中午12点触发 

  (8)0 15 10 ? * *    每天上午10:15触发 

  (9)0 15 10 * * ?     每天上午10:15触发 

  (10)0 15 10 * * ?    每天上午10:15触发 

  (11)0 15 10 * * ? 2005    2005年的每天上午10:15触发 

  (12)0 * 14 * * ?     在每天下午2点到下午2:59期间的每1分钟触发 

  (13)0 0/5 14 * * ?    在每天下午2点到下午2:55期间的每5分钟触发 

  (14)0 0/5 14,18 * * ?     在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 

  (15)0 0-5 14 * * ?    在每天下午2点到下午2:05期间的每1分钟触发 

  (16)0 10,44 14 ? 3 WED    每年三月的星期三的下午2:10和2:44触发 

  (17)0 15 10 ? * MON-FRI    周一至周五的上午10:15触发 

  (18)0 15 10 15 * ?    每月15日上午10:15触发 

  (19)0 15 10 L * ?    每月最后一日的上午10:15触发 

  (20)0 15 10 ? * 6L    每月的最后一个星期五上午10:15触发 

  (21)0 15 10 ? * 6L 2002-2005   2002年至2005年的每月的最后一个星期五上午10:15触发 

  (22)0 15 10 ? * 6#3   每月的第三个星期五上午10:15触发

  

  

原文地址:https://www.cnblogs.com/zhangzhixi/p/14354560.html