Skip to content

异步任务

类似ajax 异步请求 可以额外开启线程来完成另外一个方法

使用的场景有 邮件发送,清理缓存数据,短信验证码,等等

首先,我们需要在在spring boot 启动类上,声明开启 异步任务

添加注解

java
@EnableAsync

小提示:还有很多注解以Enable 开头的,都是开启某某功能

之后,我们需要在,异步执行的方法上添加@Asyn 注解 即可实现异步任务

邮件发送

首先需要导入mail 依赖

xml
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
    <version>2.3.7.RELEASE</version>
</dependency>

然后需要去qq 邮箱设置里开启smtp

之后获取密钥

yaml
spring:
  mail:
    password: bkdvktdsncnpdgge
    username: 2936408477@qq.com
    host: smtp.qq.com # qq邮箱
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
            required: true

测试

简单的邮件,

java
    @Test
    void contextLoads() {

        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();

        // 发送给谁
        simpleMailMessage.setTo("2936408477@qq.com");
        // 谁发送
        simpleMailMessage.setFrom("2936408477@qq.com");

        // 设置主题
        simpleMailMessage.setSubject("aaaa");

        simpleMailMessage.setText("hello");

        javaMailSender.send(simpleMailMessage);

    }

复杂的邮件 可以发送html内容

java
@Test
void contextLoads2() throws MessagingException {

    MimeMessage mimeMessage = javaMailSender.createMimeMessage();

    MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage);

    // true 表示解析html 标签
    messageHelper.setText("<h1>aaaa</h1>",true);
    messageHelper.setFrom("2936408477@qq.com");
    messageHelper.setTo("2936408477@qq.com");
    messageHelper.setSubject("1111");

    javaMailSender.send(mimeMessage);

}

定时任务

和名称一样具有相同的功能,

首先我们需要在spring boot 启动类上开启 定时任务

@EnableScheduling

之后,在你想要执行定时任务的 方法上添加注解 @Scheduled() 其中 有个cron 的属性,为表达式,表达式包含定时任务开启的时间,和循环时间

具体,可以参考,cron 代码生成器