1 异步任务
1.1 概述
- 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的;但是在处理和第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在Spring3.x之后,就已经内置了@Async来完美解决这个问题。
1.2 使用步骤
- 使用@EnableAysnc注解开启异步功能。
- 将@Async注解标注在需要异步的类或方法上。
1.3 应用示例
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
package com.sunxiaping.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;
@SpringBootApplication
@EnableAsync //开启异步注解功能
public class SpringbootApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootApplication.class, args);
}
}
package com.sunxiaping.springboot.service;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
@Service
public class AsyncService {
@Async
public void hello(){
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("。。。。数据处理中。。。。");
}
}
package com.sunxiaping.springboot.web;
import com.sunxiaping.springboot.service.AsyncService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(value = "/async")
public class AsyncController {
@Autowired
private AsyncService asyncService;
@GetMapping(value = "/hello")
public String hello() {
asyncService.hello();
return "成功";
}
}
2 定时任务
2.1 概述
- 项目开发中经常需要执行一些定时任务,比如需要在每天凌晨的时候,分析一次前一天的日志信息。Spring为我们提供了异步执行任务调度的方式,提供TaskExecutor、TaskScheduler接口。
2.2 使用步骤
- 使用@EnableScheduling注解开启定时任务功能。
- 将@Scheduled注解标注需要定时的类或方法上。
2.3 应用示例
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
- 使用@EnableScheduling注解开启定时任务功能:
package com.sunxiaping.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class SpringbootApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootApplication.class, args);
}
}
package com.sunxiaping.springboot.service;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
@Service
public class ScheduledService {
@Scheduled(cron = "*/5 * * * * ?")
public void hello(){
System.out.println("hello");
}
}
3 邮件任务
3.1 导入相关jar包的Maven坐标
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
3.2 配置application.yml
spring:
mail:
username: 1900919313@qq.com
password: unwcjvjwuknlbffb #授权码
host: smtp.qq.com
properties:
mail:
smpt:
ssl:
enable: true
3.3 测试
package com.sunxiaping.springboot;
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.JavaMailSender;
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;
@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringbootApplicationTests {
@Autowired
private JavaMailSender mailSender;
/**
* 简单邮件
*/
@Test
public void test(){
SimpleMailMessage message = new SimpleMailMessage();
//设置邮件
message.setSubject("通知--开会啦");
message.setText("一会开会啊");
message.setTo("1975356467@qq.com");
message.setFrom("1900919313@qq.com");
mailSender.send(message);
}
/**
* 复杂邮件
*/
@Test
public void test2() throws MessagingException {
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
//设置邮件
helper.setSubject("通知--开会啦");
helper.setText("<b style='color:red'>今天开会啦</b>",true);
helper.setTo("1975356467@qq.com");
helper.setFrom("1900919313@qq.com");
helper.addAttachment("1.jpg", new File("C:\\Users\\Administrator\\Pictures\\1.png"));
mailSender.send(mimeMessage);
}
}