三种任务(异步任务、邮件任务、定时任务)

本文介绍了如何在Spring Boot中实现异步任务和邮件服务。通过@EnableAsync启用异步功能,使用@Async注解实现后台任务不阻塞前端。同时,详细展示了如何配置和使用邮件服务,包括发送简单邮件和复杂邮件,并提醒注意不要频繁发送以免被邮箱服务商限制。此外,还提及了定时任务的实现,通过@Scheduled注解结合邮件服务可以设定定时发送邮件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

异步任务

引入
  在实际应用中,常常会使用到异步任务。比如发送邮件的时候,后台需要一段时间去发送,而前台这边需要等后台响应结束后才能进行下一步,这种问题一般使用多线程就能解决。
  开启异步任务的注解为@EnableAsync 使用的注解为@Async

package com.song.AsyncService;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

@Service
@Async
public class AsyncService {
    public void hello (){
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("数据正在处理中.......");
    }
}

当我们执行这个hello方法的时候他会使得下一步延迟3秒运行。比如:

import com.song.AsyncService.AsyncService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class AsyncController {
    @Autowired
    AsyncService asyncService;
    @RequestMapping("/hello")
    public String hello() {
        //延时三秒
        asyncService.hello();
        return "OK";
    }
}

当我启动项目在浏览器输入localhost:8080的时候他会延迟3秒之后再return "OK"

邮件任务

邮件任务其实挺有意思的,想做的话自己可以做一个简单的邮箱。

  • 首先,要想实现这个功能必须先引入maven依赖
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
  • 开启邮箱服务(在你的邮箱设置–>账户里面),获取给你的密码
    在这里插入图片描述

  • 配置:

spring.mail.username=2214011069@qq.com
spring.mail.password=写你刚才获取的密码
spring.mail.host=smtp.qq.com
# qq需要配置ssl
spring.mail.properties.mail.smtp.ssl.enable=true

然后我们需要里面的一个类 JavaMailSenderImpl 这个类是实现了JavaMailSender类,我们一直往下点进去看 JavaMailSender是继承了MailSender 这个接口
在这里插入图片描述

在这里插入图片描述
这里总共有两个方法,看注解可以看出,一个只是单纯发送一个简单的邮件,而另一个是发送复杂的邮件。下面是我的实现代码:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;

@Service
public class MailService {
    @Autowired
    JavaMailSenderImpl mailSender;
    /**
     * 简单的邮件发送
     */
  public  void SendSimpleMail(String Subject, String text, String toQQ, String fromQQ) {

        SimpleMailMessage message = new SimpleMailMessage();
        message.setSubject(Subject);
        message.setText(text);
        message.setTo(toQQ+"@qq.com");
        message.setFrom(fromQQ+"@qq.com");
        mailSender.send(message);
    }

    /**
     * 复杂的邮件发送
     *
     * @throws MessagingException
     */
    public void SendMimeMail(String Subject, File file, String text, String toQQ, String fromQQ) throws MessagingException {
        MimeMessage message = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setSubject(Subject);
        helper.setText(text, true);
        //发送附件
        helper.addAttachment(file.getName(), file);
        helper.setTo(toQQ+"@qq.com");
        helper.setFrom(fromQQ+"@qq.com");
        mailSender.send(message);
    }


}

注意:不能频繁的给别人发邮件,这样qq邮箱会被封。

定时任务

定时任务就是你指定个时间去运行你的代码,
首先开启注解定时功能@EnableScheduling 然后就可以在方法上面使用

package com.song.AsyncService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

import javax.mail.MessagingException;
import java.io.File;

@Service
public class SchedulingService {
    @Autowired
    MailService mailService;
    //秒   分   时     日   月   周几
    //0 * * * * MON-FRI
    @Scheduled(cron = "0 57 15 * * *")
    public void test() throws MessagingException {
      mailService.SendMimeMail("憨憨接收",new File("C:\\Users\\ASUS\\Desktop\\1.jpg"),"你是憨憨","1421073473","2214011069");
        System.out.println("执行成功!");
    }
}

这里我就是将定时任务和邮件任务结合在一起了,然后我可以实现每天早上6:00给XXX发“早安”。这是corn在线生成器的链接https://cron.qqe2.com/可以在这里设置你想设置的时间。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

blog_xsong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值