SpringBoot定時(shí)任務(wù)實(shí)現(xiàn)的幾種方式:
- Timer:這是java自帶的java.util.Timer類规伐,這個(gè)類允許你調(diào)度一個(gè)java.util.TimerTask任務(wù)。使用這種方式可以讓你的程序按照某一個(gè)頻度執(zhí)行缤削,但不能在指定時(shí)間運(yùn)行。一般用的較少吹榴。
- ScheduledExecutorService:也jdk自帶的一個(gè)類僻他;是基于線程池設(shè)計(jì)的定時(shí)任務(wù)類,每個(gè)調(diào)度任務(wù)都會(huì)分配到線程池中的一個(gè)線程去執(zhí)行,也就是說,任務(wù)是并發(fā)執(zhí)行,互不影響。
- Spring Task:Spring3.0以后自帶的task腊尚,可以將它看成一個(gè)輕量級(jí)的Quartz吨拗,而且使用起來比Quartz簡單許多。
- Quartz:這是一個(gè)功能比較強(qiáng)大的的調(diào)度器婿斥,可以讓你的程序在指定時(shí)間執(zhí)行劝篷,也可以按照某一個(gè)頻度執(zhí)行,配置起來稍顯復(fù)雜民宿。
詳情Demo請(qǐng)參考:http://www.wanqhblog.top/2018/02/01/SpringBootTaskSchedule/
使用定時(shí)任務(wù)發(fā)送一封定時(shí)郵件
1娇妓、簡單郵件
-
首先進(jìn)入QQ郵箱->設(shè)置->賬戶->開啟服務(wù)POP3/SMTP開啟->獲取授權(quán)碼
- 添加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(粘貼剛剛復(fù)制的授權(quán)碼)
spring.mail.default-encoding=UTF-8
##如果不加下面3句,會(huì)報(bào)530錯(cuò)誤
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 {
/**
* 發(fā)送簡單郵件
*/
void sendMail(String to,String subject,String content);
}
- 實(shí)現(xiàn)接口
@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");//發(fā)起者
mailMessage.setTo(to);//接受者
mailMessage.setSubject(subject);
mailMessage.setText(content);
try {
mailSender.send(mailMessage);
System.out.println("發(fā)送簡單郵件");
}catch (Exception e){
System.out.println("發(fā)送簡單郵件失敗");
}
}
}
- 寫定時(shí)任務(wù)
@Service
//@Async
public class TaskService {
@Autowired
private MailService mailService;
//在4月15號(hào)20點(diǎn)23發(fā)送定時(shí)郵件
@Scheduled(cron = "0 23 20 15 4 ? ")
public void proces(){
mailService.sendMail("xxxx@qq.com","這是一封簡單郵件","您好!");
System.out.println("發(fā)送成功");
}
}
- 在主類添加@EnableScheduling活鹰,不添加不能進(jìn)行運(yùn)行
-
發(fā)送成功
2哈恰、帶附件的郵件
- 使用MimeMessage來設(shè)置復(fù)雜一些的郵件內(nèi)容
@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");//發(fā)起者
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("發(fā)送郵件成功");
}catch (Exception e){
System.out.println("發(fā)送郵件失敗");
}*/
}
-
發(fā)送成功
cron表達(dá)式詳解
參考文章:https://www.cnblogs.com/linjiqin/archive/2013/07/08/3178452.html