异步任务
测试代码
Controller层
@RestController
public class HelloController {
@Autowired
private AsyncService asyncService;
@RequestMapping("/hello")
public String hello(){
asyncService.test();
return "ok";
}
}
@Service
public class AsyncService {
public void test(){
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("数据正在处理");
}
}
我们就可以去测试了,我们需要等待三秒之后前台才能接收到数据,影响用户体验,我们可以先把数据提交到前台,然后再处理数据,一般开启线程解决,而在SpringBoot中我们只需要简简单单的两个注解就可以实现预想的效果
主类添加@EnableAsync表示启用异步处理功能
方法添加@Async注解,告诉Spring这是一个异步处理方法
@Service
public class AsyncService {
@Async //告诉Spring这是一个异步方法
public void test(){
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("数据正在处理");
}
}
邮件任务
在原来的阶段,我们发送邮件需要自己导包写入一大堆配置么人在SpringBoot中我们只需要简简单单的几行代码就能实现我们的需求
导入依赖(启动器)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
在SpringBoot原理初探中,我们知道SpringBoot的核心是自动装配,每个功能都有自动装配类和属性类,所以这个也不例外,双击Shift查找MailAutoConfig,找到自动装配类
可以发现已经有定义好的JavaSenderImpl,我们可以直接拿来用
@SpringBootTest
class Springboot08AsyncMailTimingprojectApplicationTests {
@Autowired
private JavaMailSenderImpl mailSender;
@Test
void contextLoads() {
//一个简单的邮件测试
SimpleMailMessage mailMessage = new SimpleMailMessage();
//设置主题,内容,从哪来,到哪去
mailMessage.setSubject("这是测试邮件");
mailMessage.setText("苏绪南,你好呀!");
mailMessage.setFrom("1429473191@qq.com");
mailMessage.setTo("1429473191@qq.com");
mailSender.send(mailMessage);
System.out.println("发送成功");
}
@Test
void Test02() throws MessagingException {
//一个复杂邮件测试
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
helper.setText("<p style='color: red;'>苏绪南你好啊</p>",true);
helper.setSubject("这是一封复杂邮件");
helper.setTo("1429473191@qq.com");
helper.setFrom("1429473191@qq.com");
//添加一个附件
helper.addAttachment("1.jpg",new File("D:\\图片\\。。。\\1.jpg"));
mailSender.send(mimeMessage);
}
}
定时任务
定时任务SpringBoot中已经内置了无需我们导入依赖,定时任务相关的两个接口
TaskScheduler //任务调度者
TaskExecutor //任务执行者
我们还需要两个注解
@EnableScheduling
开启定时任务功能的注解
@Scheduled
什么时候执行
cron表达式
首先我们在主类标注@EnableScheduling
注解开启定时任务功能的注解
然后创建ScheduledService
@Service
public class ScheduledService {
//cron 表达式
//秒 分 时 日 月 0-7(周一到周日,0和7都表示周日)
/** 30 15 10 * * ? 每天10点15分30秒跑一次
* 30 0/5 10,18 * * ? 每天10点和18点每隔5分钟跑一次
* 0 15 10 ? * 1-6 每个月的周一到周六 10点15分就会跑一次
* 注意 ? 只能用在日期和星期的位置
*/
@Scheduled(cron = "0 59 * * * ?")
public void test(){
System.out.println("hello,你被执行了");
}
}
详细资料:https://www.cnblogs.com/cuiqq/p/10961478.html