SpringBoot 异步、邮件任务

这篇具有很好参考价值的文章主要介绍了SpringBoot 异步、邮件任务。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

异步任务

  1. 创建一个Hello项目

  2. 创建一个类AsyncService

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

    编写方法,假装正在处理数据,使用线程设置一些延时,模拟同步等待的情况;

    @Service
    public class AsyncService {
    
       public void hello(){
           try {
               Thread.sleep(3000);
          } catch (InterruptedException e) {
               e.printStackTrace();
          }
           System.out.println("业务进行中....");
      }
    }
    
  3. 编写AsyncController类

    我们去写一个Controller测试一下

    @RestController
    public class AsyncController {
    
       @Autowired
       private AsyncService asyncService;
    
       @GetMapping("/hello")
       public String hello(){
           asyncService.hello();
           return "OK";
      }
    
    }
    
  4. 访问http://localhost:8080/hello进行测试,3秒后出现OK,这是同步等待的情况。
    SpringBoot 异步、邮件任务,SpringBoot,spring boot,后端,java

    问题:我们如果想让用户直接得到消息,就在后台使用多线程的方式进行处理即可,但是每次都需要自己手动去编写多线程的实现的话,太麻烦了,我们只需要用一个简单的办法,在我们的方法上加一个简单的注解即可,如下:

  5. 给hello方法添加@Async注解;

    //告诉Spring这是一个异步方法
    @Async
    public void hello(){
       try {
           Thread.sleep(3000);
      } catch (InterruptedException e) {
           e.printStackTrace();
      }
       System.out.println("业务进行中....");
    }
    

    SpringBoot就会自己开一个线程池,进行调用!但是要让这个注解生效,我们还需要在主程序上添加一个注解@EnableAsync ,开启异步注解功能;

    @EnableAsync //开启异步注解功能
    @SpringBootApplication
    public class SpringbootTaskApplication {
    
       public static void main(String[] args) {
           SpringApplication.run(SpringbootTaskApplication.class, args);
      }
    
    }
    

7、重启测试,网页瞬间响应,后台代码依旧执行!

邮件任务

邮件发送,在我们的日常开发中,也非常的多,Springboot也帮我们做了支持

  • 邮件发送需要引入spring-boot-start-mail
  • SpringBoot 自动配置MailSenderAutoConfiguration
  • 定义MailProperties内容,配置在application.yml
  • 自动装配JavaMailSender
  • 测试邮件发送

测试:

  1. 引入pom依赖

    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
    

    看它引入的依赖,可以看到 jakarta.mail

    <dependency>
       <groupId>com.sun.mail</groupId>
       <artifactId>jakarta.mail</artifactId>
       <scope>compile</scope>
    </dependency>
    
  2. 查看自动配置类:MailSenderAutoConfiguration

    SpringBoot 异步、邮件任务,SpringBoot,spring boot,后端,java

    这个类中存在bean,JavaMailSenderImpl

    SpringBoot 异步、邮件任务,SpringBoot,spring boot,后端,java

    然后我们去看下配置文件

    @ConfigurationProperties(prefix = "spring.mail")
    public class MailProperties {
    
    	private static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;
    	private String host;
    	private Integer port;
    	private String username;
    	private String password;
    	private String protocol = "smtp";
    	private Charset defaultEncoding = DEFAULT_CHARSET;
    	private Map<String, String> properties = new HashMap<>();
    	private String jndiName;
    	//set、get方法省略。。。
    }
    
    
  3. 配置文件:

     spring:
       mail:
         username: 2356731504@qq.com
         password: 你的qq授权码
         host: smtp.qq.com
         properties:
           mail:
             smtp:
               ssl:
                 enable: true # qq需要配置ssl
    

    获取授权码:在QQ邮箱中的设置->账户->开启pop3和smtp服务

    SpringBoot 异步、邮件任务,SpringBoot,spring boot,后端,java

  4. Spring单元测试

     package com.liming;
     
     import org.junit.jupiter.api.Test;
     import org.springframework.beans.factory.annotation.Autowired;
     import org.springframework.boot.test.context.SpringBootTest;
     import org.springframework.mail.SimpleMailMessage;
     import org.springframework.mail.javamail.JavaMailSenderImpl;
     import org.springframework.mail.javamail.MimeMessageHelper;
     
     import javax.mail.MessagingException;
     import javax.mail.internet.MimeMessage;
     import java.io.File;
     
     @SpringBootTest
     class HelloApplicationTests {
     
         @Autowired
         private JavaMailSenderImpl javaMailSender;
     
         //邮件设置1:一个简单的邮件
         @Test
         void contextLoads() {
             SimpleMailMessage mailMessage = new SimpleMailMessage();
             mailMessage.setSubject("黎明,你好"); // 主题
             mailMessage.setText("这是邮件发送测试。。。"); // 正文
     
             mailMessage.setTo("2356731504@qq.com"); // 发送给谁
             mailMessage.setFrom("2356731504@qq.com"); // 谁发
             javaMailSender.send(mailMessage);
         }
     
         // 一个复杂的邮件
         @Test
         void contextLoads2() throws  MessagingException {
             MimeMessage mimeMessage = javaMailSender.createMimeMessage();
             //组装
             MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
     
             //正文
             helper.setSubject("黎明,你好~plus");
             helper.setText("<p style='color:red'>这是邮件发送测试</p>", true);
     
             //附件
             helper.addAttachment("1.jpg", new File("D:\\Users\\Pictures\\Saved Pictures\\SAP-ABAP.jpg"));
             helper.addAttachment("2.jpg", new File("D:\\Users\\Pictures\\Saved Pictures\\SAP-ABAP.jpg"));
     
             helper.setTo("2356731504@qq.com");
             helper.setFrom("2356731504@qq.com");
     
             javaMailSender.send(mimeMessage);
     
         }
     
     }
    
    

    SpringBoot 异步、邮件任务,SpringBoot,spring boot,后端,java
    SpringBoot 异步、邮件任务,SpringBoot,spring boot,后端,java文章来源地址https://www.toymoban.com/news/detail-645040.html

到了这里,关于SpringBoot 异步、邮件任务的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包