day09 基于spring的定时任务发送邮件

1.定时任务实现的几种方式:

  • Timer:这是java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少。
  • ScheduledExecutorService:也jdk自带的一个类;是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,也就是说,任务是并发执行,互不影响。
  • Spring Task:Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多。
  • Quartz:这是一个功能比较强大的的调度器,可以让你的程序在指定时间执行,也可以按照某一个频度执行,配置起来稍显复杂。

2.使用spring task发送定时邮件

需要用到的maven依赖
        
            org.springframework.boot
            spring-boot-starter
        

        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
            org.projectlombok
            lombok
            1.18.6
            true
        

        
            org.springframework.boot
            spring-boot-starter-mail
        
application.properties配置
##qq邮箱配置
spring.mail.host=smtp.qq.com
[email protected]
spring.mail.password=授权码
spring.mail.default-encoding=UTF-8


##如果不加下面3句,会报530错误
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
MailService接口
public interface MailService {
    /**
     * 发送简单邮件
     */
    void sendMail(String to,String subject,String content);
}

MailServiceImpl
@Service("mailService")
public class MailServiceImpl implements MailService {
    @Autowired
    private JavaMailSender mailSender;

    @Override
    public void sendMail(String to, String subject, String content) {
        SimpleMailMessage mailMessage=new SimpleMailMessage();
        mailMessage.setFrom("xxx");//发起者
        mailMessage.setTo("xxx");//接收者
        mailMessage.setSubject("定时邮件测试");
        mailMessage.setText("这是一个定时邮件测试");
        try {
            mailSender.send(mailMessage);
            System.out.println("发送简单邮件");
        }catch (Exception e){
            System.out.println("发送简单邮件失败");
        }
    }

}
TaskService
@Service
public class TaskService {
    @Autowired
    private MailService mailService;

     //cron时间表达式
    @Scheduled(cron = "0 8 10 ? * *")
    public void proces(){
        mailService.sendMail("xxx","定时邮件测试","这是一个定时邮件测试");
        System.out.println("success");
    }
}

你可能感兴趣的:(day09 基于spring的定时任务发送邮件)