SpringBoot定时任务实现的几种方式:
- Timer:这是java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少。
- ScheduledExecutorService:也jdk自带的一个类;是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,也就是说,任务是并发执行,互不影响。
- Spring Task:Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多。
- Quartz:这是一个功能比较强大的的调度器,可以让你的程序在指定时间执行,也可以按照某一个频度执行,配置起来稍显复杂。
详情Demo请参考:http://www.wanqhblog.top/2018/02/01/SpringBootTaskSchedule/
使用定时任务发送一封定时邮件
1、简单邮件
-
首先进入QQ邮箱->设置->账户->开启服务POP3/SMTP开启->获取授权码
- 添加pom依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
- 配置application.properties
spring.mail.host=smtp.qq.com
spring.mail.username=xxxx@qq.com(修改为自己的qq邮箱)
spring.mail.password=xxxxx(粘贴刚刚复制的授权码)
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
- 写Service接口
public interface MailService {
/**
* 发送简单邮件
*/
void sendMail(String to,String subject,String content);
}
- 实现接口
@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("xxxxx@qq.com");//发起者
mailMessage.setTo(to);//接受者
mailMessage.setSubject(subject);
mailMessage.setText(content);
try {
mailSender.send(mailMessage);
System.out.println("发送简单邮件");
}catch (Exception e){
System.out.println("发送简单邮件失败");
}
}
}
- 写定时任务
@Service
//@Async
public class TaskService {
@Autowired
private MailService mailService;
//在4月15号20点23发送定时邮件
@Scheduled(cron = "0 23 20 15 4 ? ")
public void proces(){
mailService.sendMail("xxxx@qq.com","这是一封简单邮件","您好!");
System.out.println("发送成功");
}
}
- 在主类添加@EnableScheduling,不添加不能进行运行
-
发送成功
2、带附件的邮件
- 使用MimeMessage来设置复杂一些的邮件内容
@Override
public void sendMail(String to, String subject, String content) throws MessagingException {
/* SimpleMailMessage mailMessage=new SimpleMailMessage();*/
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper mailMessage = new MimeMessageHelper(mimeMessage, true);
mailMessage.setFrom("2547241647@qq.com");//发起者
mailMessage.setTo(to);//接受者
mailMessage.setSubject(subject);
mailMessage.setText(content);
FileSystemResource file = new FileSystemResource(new File("D://city.jpg"));
mailMessage.addAttachment("附件-1.jpg", file);
mailSender.send(mimeMessage);
/* try {
mailSender.send(mailMessage);
System.out.println("发送邮件成功");
}catch (Exception e){
System.out.println("发送邮件失败");
}*/
}
-
发送成功
cron表达式详解
参考文章:https://www.cnblogs.com/linjiqin/archive/2013/07/08/3178452.html