异步任务
springboot中的异步任务需要用到多线程
例:
使service中的业务方法停顿五秒后再执行
@Service
public class AsyncService {
// 设置成异步方法
@Async
public void hello(){
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("数据正在处理.....");
}
}
异步处理,在业务方法上加上@Async,再在springboot中的主运行类上开启Async开关@EnableAsync,从而达到前端页面及时响应,后台异步处理。
邮件任务
pom.xml里面注册springboot邮件的坐标
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
application.properties中配置使用邮箱的信息,包括用户名邮箱和主机(类似于数据库配置)
spring.mail.username=1104142832@qq.com
spring.mail.password=assvogtdfdctggff
spring.mail.host=smtp.qq.com
#qq邮箱独有 开启加密验证
spring.mail.properties.mail.smtp.ssl.enable=true
最后可以在测试类中写邮件(其中主题)以下四个属性内容是最低限度的发送邮件配置
class AsyncdemoApplicationTests {
@Autowired
JavaMailSenderImpl mailSender;
@Test
void contextLoads() {
SimpleMailMessage simpleMailMessage=new SimpleMailMessage();
//配置的四个邮件内容
simpleMailMessage.setSubject("邮箱功能测试");
simpleMailMessage.setText("邮件正文");
simpleMailMessage.setTo("1104142832@qq.com");
simpleMailMessage.setFrom("1104142832@qq.com");
mailSender.send(simpleMailMessage);
}
}
复杂邮件配置,基本框架与简单邮件配置相同,需要用到mailSender创造的mime message类,可以利用addattachment给邮件添加附件
void contextLoads2() throws MessagingException {
MimeMessage message=mailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper=new MimeMessageHelper(message,true);
//这里的第二个参数是多文件传输的允许
mimeMessageHelper.setSubject("邮件主题");
mimeMessageHelper.setText("<p style=color:red>邮件内容</p>",true);
//这里的第二个参数是html格式的允许
File file=new File("C:\\Users\\lenvo\\Desktop\\1.jpg");
mimeMessageHelper.addAttachment("1.jpg",file);
mimeMessageHelper.setTo("1104142832@qq.com");
mimeMessageHelper.setFrom("1104142832@qq.com");
mailSender.send(message);
}
}
定时任务
springboot自带整合过的定时任务接口,所以不需要在导入包
-----taskexecutor
-----taskschedule
这两个是定时任务的核心接口API
现在主程序里加上@EnalbleScheduling注解
再在需要使用定时任务的service业务方法上加上@scheduled注解,注意这里要使用cron表达式表示运行时间。Seconds Minutes Hours DayofMonth Month DayofWeek(corn从左到右(用空格隔开):秒 分 小时 月份中的日期 月份 星期中的日期 年份)
(注意定时业务方法是直接跟springboot运行周期绑定的,没有controller调用也会到时间自动执行)
@Service
public class ScheduleService {
@Scheduled(cron ="0 04 16 * * ?")
public void helloSchedule(){
System.out.println("计时任务成功运行!");
}
}