一、实验目的
1.使用 Spring Boot 完成异步任务、定时任务以及邮件任务。
二、实验内容
1.熟悉 Spring Boot 整合异步任务的实现
2.熟悉 Spring Boot 整合定时任务的实现
3.熟悉 Spring Boot 整合邮件任务的实现
三、实验步骤及截图
1.使用Idea+Maven新建项目,并进行必要配置。
2.编写入口类,并启用计划任务。
1. @EnableScheduling 2. @SpringBootApplication 3. public class ChapterAsync_LWL { 4. public static void main(String[] args){ 5. SpringApplication.run(ChapterAsync_LWL.class,args); 6. } 7. }
3.在service类,编写方法测试cron定时任务。
1. // 简单的定时任务 2. 3. @Scheduled(cron = "10 * * * * *") 4. 5. public void Task01(){ 6. 7. System.out.println("***********每分钟的第10S启动!*********"+simpleDateFormat.format(new Date())); 8. 9. }
4.在service类,编写方法测试fixedDelay定时任务。
1. //delay从第一次开始就计算间隔时间 2. 3. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 4. 5. int index = 1; 6. 7. @Scheduled(fixedDelay = 10000) 8. 9. public void Task02(){ 10. 11. System.out.println("***********Task02任务第"+index+"启动!*********"+simpleDateFormat.format(new Date())); 12. 13. try{ 14. 15. Thread.sleep(5000); 16. 17. }catch (Exception e){ 18. 19. System.out.println("错误!"); 20. 21. } 22. 23. System.out.println("***********Task02任务第"+index+"结束!*********"+simpleDateFormat.format(new Date())); 24. 25. index++; 26. 27. }
5.在service类,编写方法测试fixedRate定时任务。
1. //rate从第一次开始就计算间隔时间 2. 3. @Scheduled(fixedRate = 10000) 4. 5. public void Task03(){ 6. 7. System.out.println("***********Task03任务第"+index+"启动!*********"+simpleDateFormat.format(new Date())); 8. 9. try{ 10. 11. Thread.sleep(5000); 12. 13. }catch (Exception e){ 14. 15. System.out.println("错误!"); 16. 17. } 18. 19. System.out.println("***********Task03任务第"+index+"结束!*********"+simpleDateFormat.format(new Date())); 20. 21. index++; 22. 23. }
6.编写controller类,添加sendSms方法,调用无返回值的service方法。
1. @Autowired 2. 3. AsynService asynService; 4. 5. @GetMapping("/sendSMS") 6. 7. public String sendSms() throws Exception{ 8. 9. System.out.println("***********主方法开始运行***********"); 10. 11. Long timeStart = System.currentTimeMillis(); 12. 13. asynService.sendSMS(); 14. 15. Long timeEnd = System.currentTimeMillis(); 16. 17. System.out.println("***********主方法结束运行--异步调用业务逻辑耗时"+(timeEnd-timeStart)+"***********"); 18. 19. return "success"; 20. 21. }
1. @Async//无返回值的被调用方法 2. 3. public void sendSMS() throws Exception{ 4. 5. System.out.println("A无返回值***********耗时的业务逻辑开始被调用***********"); 6. 7. Long timeStart = System.currentTimeMillis(); 8. 9. Thread.sleep(50*1000);//模拟一个耗时的操作 10. 11. Long timeEnd = System.currentTimeMillis(); 12. 13. System.out.println("B无返回值***********耗时的业务逻辑结束被调用,耗时:"+(timeEnd-timeStart)+"***********"); 14. 15. }