1、异步任务
1、pom文件,web即可
2、@Async写在要异步执行的文件上,主启动类写上@EnableAsync
package pshdhx.task.demo.service;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
/**
* @Authtor pshdhx
* @Date 2021/4/120:29
* @Version 1.0
*/
@Service
public class AsyncService {
@Async //异步
public void hello() throws InterruptedException {
Thread.sleep(Long.parseLong("3000"));
System.out.println("hello...");
}
}
package pshdhx.task.demo.service.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import pshdhx.task.demo.service.AsyncService;
/**
* @Authtor pshdhx
* @Date 2021/4/120:30
* @Version 1.0
*/
@RestController
public class TaskController {
@Autowired
AsyncService asyncService;
@GetMapping("/hello")
public String hello() throws InterruptedException {
asyncService.hello();
return "success";
}
}
package pshdhx.task.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;
@SpringBootApplication
@EnableAsync
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
2、定时任务
项目开发中经常需要执行一些定时任务,比如需要在每天凌晨的时候,分析一次前一天的日志。spring为我们提供了执行异步调度的方式提供TaskExecude TaskScheduler接口
两个注解:@EnableScheduling @Scheduled
cron表达式
字段 | 允许值 | 允许的特殊字符 |
秒 | 0-59 | , - * / |
分 | 0-59 | , - * / |
小时 | 0-23 | ,- * / |
日期 | 1-31 | , - * / L W C |
月份 | 1-12 | , - * / |
星期 | 0-7或SUN-SAT 0和7都是星期日 | , - * / L C # |
特殊字符 | 代表含义 |
, | 枚举 |
- | 区间 |
* | 任意 |
/ | 步长 |
? | 日/星期冲突了进行匹配 |
L | 最后 |
W | 工作日 |
C | 和Calendar联系后计算过的值 |
# | 第几个 4#2第二个星期四 |
package pshdhx.task.demo.service;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
/**
* @Authtor pshdhx
* @Date 2021/4/120:44
* @Version 1.0
*/
@Service
public class SchedulerService {
/**
* 0,1,2,3,4 * * * * MON-SAT 每第一秒 第二 第三 第四秒执行
* 0-4 * * * * MON-SAT 第0秒到第四秒执行 每周一到周六
* 0/4 * * * * MON-SAT 每周一到周六每隔4秒执行一次
* quartz框架 的0 代表周日 sheduler是0和7 都是代表周日
* 0 0/15 14,18 * * ? 每天14点和15点 每隔15分钟执行一次
* 0 15 10 ? * 1-6 每个月的周一到周六的10点 15分执行一次
* 0 0 2 ? * 6L 每个月的最后一个星期六2点执行一次
* 0 0 2 LW * ? 每个月的最后一个工作日两点执行一次
* 0 0 2-4 ? * 1#1 每个月的第一个星期一两点到四点期间,每个整点执行一次
* 总结: ? 是处理 日 和 星期的冲突
* *:代表汉字 每
*/
@Scheduled(cron = "0/2 * * * * *") //每两秒执行一次
public void hello(){
System.out.println("hello");
}
}
package pshdhx.task.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableAsync
@EnableScheduling
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
邮件任务
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
spring.mail.username=1152777670@qq.com
spring.mail.password=fjajfakdfadf
spring.mail.host=smtp.qq.com
spring.mail.properties.mail.smtp.ssl.enable=true
package pshdhx.task.demo;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMailMessage;
import org.springframework.mail.javamail.MimeMessageHelper;
import java.io.File;
@SpringBootTest
class DemoApplicationTests {
@Autowired
JavaMailSenderImpl javaMailSender;
//发送简单邮件
@Test
void contextLoads() {
SimpleMailMessage message = new SimpleMailMessage();
//邮件设置
message.setSubject("通知:今晚开会");
message.setText("content mail");
message.setTo("15321234531@163.com");
message.setFrom("1152777670@qq.com");
javaMailSender.send(message);
}
//发送复杂邮件
@Test
void Test2() throws Exception{
javax.mail.internet.MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
mimeMessageHelper.setSubject("通知:今晚开会");
mimeMessageHelper.setText("<b style='color:red'>今天7:30开会</b>");
mimeMessageHelper.setTo("15321234531@163.com");
mimeMessageHelper.setFrom("1152777670@qq.com");
//上传文件
mimeMessageHelper.addAttachment("1.jpg",new File("D:/1.jpg"));
mimeMessageHelper.addAttachment("2.jpg",new File("D:/2. jpg"));
javaMailSender.send(mimeMessage);
}
}