好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

详解Springboot中的异步、定时、邮件任务

一、异步任务

1、编写一个类AsyncService

异步处理还是非常常用的,比如我们在网站上发送邮件,后台会去发送邮件,此时前台会造成响应不动,直到邮件发送完毕,响应才会成功,所以我们一般会采用多线程的方式去处理这些任务。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

package com.rk.service;

import org.springframework.scheduling.annotation.Async;

import org.springframework.stereotype.Service;

@Service

public class AsyncService {

     public void hello(){

         try {

             System.out.println( "数据处理中~" );

             Thread.sleep( 3000 ); //停止三秒

         } catch (InterruptedException e) {

             e.printStackTrace();

         }

     }

}

2、编写一个AsyncController类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

package com.rk.controller;

import com.rk.service.AsyncService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class AsyncController {

     @Autowired

     AsyncService asyncService;

     @GetMapping ( "/hello" )

     public String hello(){

         asyncService.hello();

         return "success" ;

     }

}

现在启动项目进行测试,三秒后才会出现success,现在还不是异步

3、开启异步

?

1

2

3

4

5

6

7

8

9

@Async //告诉spring这是一个异步方法

    public void hello(){

        try {

            System.out.println( "数据处理中~" );

            Thread.sleep( 3000 ); //停止三秒

        } catch (InterruptedException e) {

            e.printStackTrace();

        }

    }

 

?

1

2

3

4

5

6

7

@EnableAsync //开启异步注解功能

@SpringBootApplication

public class Springboot09TestApplication {

     public static void main(String[] args) {

         SpringApplication.run(Springboot09TestApplication. class , args);

     }

}

二、邮件任务

1、引入依赖

?

1

2

3

4

<dependency>

      <groupId>org.springframework.boot</groupId>

      <artifactId>spring-boot-starter-mail</artifactId>

  </dependency>

2、配置mail

?

1

2

3

4

5

6

7

8

#用户名

spring.mail.username= 1624603357 @qq .com

#密码

spring.mail.password=yblyxhvmnsurbbci

#发送邮件服务器

spring.mail.host=smtp.qq.com

#开启加密验证 ssl

spring.mail.properties.mail.smtp.ssl.enable= true

3、测试

简单邮件

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

@Autowired

JavaMailSenderImpl mailSender;

 

 

  @Test

void contextLoads() {

     SimpleMailMessage mailMessage = new SimpleMailMessage();

     mailMessage.setSubject( "你好,rk" ); //邮件标题

     mailMessage.setText( "测试邮件" ); //邮件内柔

     mailMessage.setTo( "r1624603357@126.com" ); //收件人邮箱

     mailMessage.setFrom( "1624603357@qq.com" ); //发件人邮箱

     mailSender.send(mailMessage);

 

}

复杂邮件

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

@Test

void contextLoads2() throws MessagingException {

     //一个复杂的邮件

     MimeMessage mimeMessage = mailSender.createMimeMessage();

 

     //组装

     MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true );

 

     //正文

     helper.setSubject( "你好,rk" );

     helper.setText( "<h1 style='color:red'>测试邮件</h1>" , true );

 

     //附件

     helper.addAttachment( "1.png" , new File( "D:\\QLDownloadGame\\2\\1.png" ));

     helper.addAttachment( "rk.docx" , new File( "E:\\桌面\\rk.docx" ));

 

     // 发/收件人

     helper.setTo( "r1624603357@126.com" );

     helper.setFrom( "1624603357@qq.com" );

 

     //发送

     mailSender.send(mimeMessage);

 

}

三、定时任务

1、编写一个ScheduledService类

?

1

2

3

4

5

6

7

8

9

10

11

@Service

public class ScheduledService {

     //秒 分 时 日 月 周几

     //0 * * * * MON-FRI

     //注意cron表达式的用法;   每天20:28 0秒执行该方法

     @Scheduled (cron = "0 28 20 * * 0-7" )

     public void hello(){

         System.out.println( "现在是20:28" );

         System.out.println( "hello....." );

     }

}

项目启动后每天20:28:00执行hello方法

2、添加注解

?

1

2

3

4

5

6

7

8

@EnableAsync //开启异步注解功能

@EnableScheduling //开启定时功能注解

@SpringBootApplication

public class Springboot09TestApplication {

     public static void main(String[] args) {

         SpringApplication.run(Springboot09TestApplication. class , args);

     }

}

cron表达式练习

/*
【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点期间,每个整点都执行一次
*/

到此这篇关于Springboot的异步、定时、邮件任务的文章就介绍到这了,更多相关Springboot异步定时邮件任务内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

原文链接:https://blog.csdn.net/m0_46979453/article/details/121082374

查看更多关于详解Springboot中的异步、定时、邮件任务的详细内容...

  阅读:16次