异步任务
@RestController
public class HelloController {
@Autowired
HelloService helloService;
@GetMapping("/hello")
String hello(){
helloService.Hello();
return "Hello";
}
}
@Service
public class HelloService {
public void Hello(){
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("i'm sleeping");
}
}
调用/hello的接口,会发现网页延迟了3秒才返回了结果。这时候要开启异步任务。
在启动类上加上@EnableAsync注解,在异步任务的方法上加上@Async注解即可。
@Service
public class HelloService {
@Async
public void Hello(){
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("i'm sleeping");
}
}
再次测试,直接返回了Hello,而控制台的输出在三秒后姗姗来迟。
发送邮件
首先导入依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
然后去配置application.yml的邮箱信息(非qq邮箱):
邮箱配置信息(qq邮箱)需要先在qq邮箱中开启并获得pop3/smtp服务的授权码:
发送简单邮件:
@Autowired
JavaMailSenderImpl mailSender;
@Test
void contextLoads() {
SimpleMailMessage simpleMailMessage=new SimpleMailMessage();
simpleMailMessage.setFrom("此处填入发送方邮箱号");
simpleMailMessage.setTo("此处填入接收方邮箱号");
simpleMailMessage.setSubject("邮件主题");
simpleMailMessage.setText("邮件内容");
mailSender.send(simpleMailMessage);
}
发送复杂邮件:
@Autowired
JavaMailSenderImpl mailSender;
@Test
void MyTest() throws MessagingException {
MimeMessage mimeMessage=mailSender.createMimeMessage();
//如果要添加附件的话,第二个参数需要设置成true
MimeMessageHelper helper=new MimeMessageHelper(mimeMessage,true);
helper.setFrom("此处填入发送方邮箱");
helper.setTo("此处填入接收方邮箱");
//可以把内容设置成html语言,只要第二个参数是true就可以解析
helper.setText("<p style='color:purple'>hello</p>",true);
helper.setSubject("邮件主题");
helper.addAttachment("attachment.jpg",new File("文件路径"));
mailSender.send(mimeMessage);
}
定时任务
首先在启动类上加上@EnableScheduling注解,然后在需要定时的任务上面加上@Scheduled(cron=“此处用cron表达式替换”)。
@Scheduled(cron = "0 * * * * *")
public void SayHello(){
System.out.println("hello!!");
}
有关cron表达式:
cron表达式详解