Spring Boot 定时任务和邮件任务
Spring Boot真是一个贴心的快速开发框架,你还在为设置Linux定时任务烦恼吗,你还在为寻找合适的邮件插件烦恼吗,对不起,我没有这些烦恼,因为我使用spring boot
定时任务
首先要在主程序类加上启用定时任务的注解@EnableScheduling
@EnableScheduling
@SpringBootApplication
public class Demo20190808Application {
public static void main(String[] args) {
SpringApplication.run(Demo20190808Application.class, args);
}
}
然后写一个定时方法,定时方法加上@Scheduled注解,程序执行中就会在对应的时间点执行,不需要在代码中调用。这里实现了自定义的接口,也可以不实现直接写类。
@Service
public class ScheduleServiceImpl implements ScheduleService {
// 秒 分 时 日 月 周几
// ?代表日和周几冲突不使用哪个
// -代表范围
// ,代表例举
// /代表从什么时候开始,每隔多久
// *代表任意
// L代表最后
// W代表工作日
// #代表第几个周几
//【0 0/5 14,18 * * ?】 每天14点、18点整每隔5分钟执行一次
//【0 15 10 ? *1-6】 每月的周一到周六10:15:00执行一次
//【0 0 2 ? * 6L】 每月的最后一个周六凌晨2点执行一次
//【0 0 2 LW * ?】 每月的最后一个工作日的凌晨2点执行一次
//【0 0 2-4 ? * 1#1】 每月的第一个周一的凌晨2点到4点间每个整点执行一次
@Override
@Scheduled(cron = "0 * * * * MON-SAT")
public void schedulePrint() {
System.out.println("currentMills:"+System.currentTimeMillis());
}
}
邮件任务
首先要在邮箱设置中开启SMTP服务,生成授权码,后面有用到授权码
然后在依赖文件引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
在yml配置文件配置下面属性
#======================= 邮箱配置(授权) =======================
spring:
mail:
username: test@qq.com #授权用户
password: testcode #授权码,需开启SMTP服务
host: smtp.qq.com #授权服务器
properties:
mail:
smtp:
ssl:
enable: true #开启SSL
以下是邮件接口和邮件接口的实现
/*
* MailService
*/
public interface MailService {
/**
* 发送简单邮件
* @param subject
* @param text
* @param receiver
* @param provider
*/
void sendSimpleMail(String subject,String text,String receiver,String provider);
/**
* 发送带附件的邮件
* @param subject
* @param text
* @param receiver
* @param attachments
* @param provider
*/
void sendAttachmentMail(String subject, String text, String receiver, Map<String, String> attachments,String provider);
}
/*
* MailServiceImpl
*/
@Service
public class MailServiceImpl implements MailService {
@Autowired
private JavaMailSenderImpl mailSender;
@Override
public void sendSimpleMail(String subject, String text, String receiver,String provider) {
SimpleMailMessage message = new SimpleMailMessage();
message.setSubject(subject);
message.setText(text);
message.setTo(receiver);
message.setFrom(provider);
mailSender.send(message);
}
@Override
public void sendAttachmentMail(String subject, String text, String receiver, Map<String, String> attachments,String provider) {
MimeMessage mimeMessage = mailSender.createMimeMessage();
try{
//multipart 是否上传附件
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage,true);
mimeMessageHelper.setSubject(subject);
mimeMessageHelper.setText(text);
mimeMessageHelper.setTo(receiver);
mimeMessageHelper.setFrom(provider);
//上传附件
attachments.forEach((k,v) -> {
try{
mimeMessageHelper.addAttachment(k,new File(v));
}catch (MessagingException e){
e.printStackTrace();
}
});
}catch (Exception e){
e.printStackTrace();
}
mailSender.send(mimeMessage);
}
}
以下是测试代码
@RunWith(SpringRunner.class)
@SpringBootTest
public class MailServiceImplTest {
@Autowired
private MailService mailService;
@Test
public void sendSimpleMail() {
mailService.sendSimpleMail("测试邮件主题1","这是测试邮件内容1","test@qq.com","test@qq.com");
}
@Test
public void sendAttachmentMail() {
Map<String,String> fileMap = new HashMap<>();
fileMap.put("Global.asax","D:\\ZJ\\Global.asax");
fileMap.put("ZYWCF.svc","D:\\ZJ\\ZYWCF.svc");
mailService.sendAttachmentMail("测试邮件主题2","这是测试邮件内容2","test@qq.com",fileMap,"test@qq.com");
}
}