一.异步任务
在方法上打上注解@Async,告诉spring这是一个异步任务,同时开启异步任务的注解,在Springboot的启动类上打上@EnableAsync.
异步任务不会耽误主程序的运行,除非主程序需要使用异步任务的结果,但这时候的异步任务就属于主程序了
Controller
@RestController
public class controller {
@Autowired
private AsyncService asyncService;
@GetMapping("/hello")
public String hello(){
asyncService.hello();
return "hello";
}
}
@Service
public class AsyncService {
@Async
public void hello(){
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("处理中...");
}
}
访问service中hello方法,如果不添加异步任务,那么浏览器上的页面回等到大约5s后才会返回,但是使用使用异步任务后,sucess会很快返回,5s后控制台就会打印出“处理中”
二.定时任务
和异步任务步骤一致,在springboot的启动类上添加注解@EnableSching,表示开启定时任务。在定时任务上添加@Scheduled()执行的时间
@Scheduled(cron = "* * * * * 0-7")
public void hi(){
System.out.println("你好");
}
cron里面写的是时间点
* * * * * *
第一个*代表的是一分钟某一秒,取值0-59
第二个*代表的是一小时的分,取值0-59
第三个*代表的是一天的小时,取值0-23
第四个*代表的是一个月的天,取值1-31
第五个*代表的是一年中月分,取值1-12
第六个*代表的是一周的周几,取值0-7或者SUN-SAT,0,7都是代表周日
, | 某个值1,2,3,4,… * * * * * |
---|---|
- | 代表某个区间 例如:0-4,* * * * * |
/ | 隔多久执行0/4 * * * * * 隔了四秒执行一次 |
三.邮件任务
需要导入springboot的支持,spring-boot-starter-mail依赖,
需要在配置文件中配置发送人的账号,密码,主机,安全连接ssl
spring.mail.username=写自己的邮箱
spring.mail.password=密码时生成的授权码,看下图
spring.mail.host=smtp.qq.com
spring.mail.properties.mail.smtp.ssl.enable=true
邮箱需要开启pop3/smtp
IMAP/SMTP
开启时需要付费短信,一毛一条
@Autowired
private JavaMailSender javaMailSender;//springboot提供的发送邮件bean
@Test
public void contextLoads() {
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setSubject("今完上车");
simpleMailMessage.setFrom("5XXXXXXX@qq.com");//发送人
simpleMailMessage.setText("一定要记得");
simpleMailMessage.setTo("XXXXXXXXX88@163.com");收件人
simpleMailMessage.setSentDate(new Date());
javaMailSender.send(simpleMailMessage);
}
附带文件内容的邮件:
@Test
public void complexMail() throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage,true);
mimeMessageHelper.setSubject("上车");
mimeMessageHelper.setFrom("5XXXXXXX@qq.com");//发送人
mimeMessageHelper.setText("一定要记得");
mimeMessageHelper.setTo("XXXXXXXXX88@163.com");
mimeMessageHelper.setSentDate(new Date());
mimeMessageHelper.addAttachment("hello.jpg",new File("C:\\w.png"));//附件
javaMailSender.send(mimeMessage);
}