【SpringBoot-任务 03】
主要包含:异步任务,定时任务,邮件任务
一、异步任务
在Java应用中,绝大多数情况下都是同步完成交互的,但是和第三方交互时会出现延迟,springboot提供了异步处理的方式解决了这种问题
1、主要有两个注解完成:
@Aysnc 告诉springboot这是一个异步任务
@EnableAysnc 开启异步任务 --->启动类上加此注解
@Service public class Taskyibu { //告诉Springboot这是一个异步方法 @Async public void hello(){ try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("seccess!"); } }
二、定时任务
springboot提供了两个注解:@EnableScheduling(开启定时任务注解)、@Scheduled(设置定时计划注解)
cron表达式
常用的集中定时计划
每一位代表对应的
second(秒), minute(分), hour(时), day of month(日), month(月), day of week(周几). 0 * * * * MON-FRI 【0 0/5 14,18 * * ?】 每天14点整,和18点整,每隔5分钟执行一次 【0 15 10 ? * 1-6】 每个月的周一至周六10:15分执行一次 【0 0 2 ? * 6L】每个月的最后一个周六凌晨2点执行一次 【0 0 2 LW * ?】每个月的最后一个工作日凌晨2点执行一次 【0 0 2-4 ? * 1#1】每个月的第一个周一凌晨2点到4点期间,每个整点都执行一次;
下面是针对秒,不通的写法
【0 * * * * MON-SAT】 周一到周六整秒执行 【0-4 * * * * MON-SAT】 周一到周六0到4秒执行 【0,1,2,3,4 * * * * MON-SAT】周一到周六0到4秒执行 【0/4 * * * * MON-SAT】周一到周六0到4秒执行
@Service public class SchedulerService { @Scheduled(cron = "0 * * * * MON-SAT") public void test(){ System.out.println("hello!"); } }
对那个类想做定时任务,就可以在类上加@Scheduled
三、邮件任务
Spring Boot 自动配置MailSenderAutoConfiguration
发邮件的原理是:在springboot中配置邮箱服务器,然后通过配置的邮箱服务器发送邮件
1、引入pom文件
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
2、application.properties文件内配置邮件服务器
spring.mail.username=1832785141@qq.com spring.mail.password=qskacaztriqrbhdj spring.mail.host=smtp.qq.com #需要配置一个ssl的安全配置 spring.mail.properties.mail.smtp.ssl.enable=true
已qq邮箱举例:
password不是qq登录时的邮箱,而是qq授权后生成的授权码
host可以通过开启任务的第二项IMAP/SMTP服务,点击进去查看
3、自动装配JavaMailSender发送邮件
package com.wufq.task; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.test.context.junit4.SpringRunner; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import java.io.File; @RunWith(SpringRunner.class) @SpringBootTest public class TaskApplicationTests { //自动注入JavaMailSender邮件发送器 @Autowired JavaMailSenderImpl mailSender; //发送文本类型的简单邮件 @Test public void contextLoads() { //创建简单的邮件发送对象 SimpleMailMessage message = new SimpleMailMessage(); //邮件设置 message.setSubject("通知-今天放假"); //设置标题 message.setText("下午2点放假!"); //设置文本 message.setTo("wufuqiangtest@163.com","wufuqiangtesting@163.com"); //收信人,可以给多个邮箱发送 message.setFrom("1832785141@qq.com"); //发送人 mailSender.send(message); } //发送带附件这样的复杂邮件 @Test public void test() throws MessagingException { //1、创建一个复杂的消息邮件 MimeMessage mimeMessage = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);//如果要上传文件,设置为true //邮件设置 helper.setSubject("通知-中秋放假"); //设置标题 helper.setText("<b style='color:red'>放假三天</b>",true); //设置文本,true为html helper.addAttachment("1.jpg",new File("/Users/wufq/Desktop/1.jpg")); helper.addAttachment("2.jpg",new File("/Users/wufq/Desktop/2.jpg")); helper.setTo("wufuqiangtest@163.com");//收信人,可以给多个邮箱发送 helper.setFrom("1832785141@qq.com"); //发送人 mailSender.send(mimeMessage); } }