========================10、SpringBoot整合定时任务和异步任务处理 ===============================

1、SpringBoot定时任务schedule讲解
简介:讲解什么是定时任务和常见定时任务区别

1、常见定时任务 Java自带的java.util.Timer类
timer:配置比较麻烦,时间延后问题
timertask:不推荐

2、Quartz框架
配置更简单
xml或者注解

3、SpringBoot使用注解方式开启定时任务
1)启动类里面 @EnableScheduling开启定时任务,自动扫描
2)定时任务业务类 加注解 @Component被容器扫描
3)定时执行的方法加上注解 @Scheduled(fixedRate=2000) 定期执行一次

2、SpringBoot常用定时任务配置实战
简介:SpringBoot常用定时任务表达式配置和在线生成器

  1. package net.xdclass.base_project.task;
  2.  
  3. import java.util.Date;
  4.  
  5. import org.springframework.scheduling.annotation.Scheduled;
  6. import org.springframework.stereotype.Component;
  7.  
  8. /**
  9. * 功能描述:定时任务业务类
  10. *
  11. * <p> 创建时间:Apr 30, 2018 10:21:48 AM </p>
  12. *
  13. *@作者 小D课堂 小D
  14. */
  15. @Component
  16. public class TestTask {
  17.  
  18. @Scheduled(fixedRate=2000) //两秒执行一次
  19. public void sum(){
  20. System.out.println("当前时间:"+new Date());
  21. }
  22.  
  23. }

Task

控制台

1、cron 定时任务表达式 @Scheduled(cron="*/1 * * * * *") 表示每秒
1)crontab 工具 https://tool.lu/crontab/
2、fixedRate: 定时多久执行一次(上一次开始执行时间点后xx秒再次执行;)
3、fixedDelay: 上一次执行结束时间点后xx秒再次执行
4、fixedDelayString: 字符串形式,可以通过配置文件指定

流程:新建任务类注册到context,通过@Scheduled注解自动执行

  1. package net.xdclass.base_project.task;
  2.  
  3. import java.util.Date;
  4.  
  5. import org.springframework.scheduling.annotation.Scheduled;
  6. import org.springframework.stereotype.Component;
  7.  
  8. /**
  9. * 功能描述:定时任务业务类
  10. *
  11. * <p> 创建时间:Apr 30, 2018 10:21:48 AM </p>
  12. *
  13. *@作者 小D课堂 小D
  14. */
  15. @Component
  16. public class TestTask {
  17.  
  18. @Scheduled(fixedRateString="2000")//两秒执行一次
  19. //@Scheduled(cron="*/2 * * * * *")
  20. public void sum() throws InterruptedException{
  21.  
  22. Thread.sleep(4000L);
  23. System.out.println("结束 当前时间:"+new Date());
  24.  
  25. }
  26.  
  27. //@Scheduled(cron="*/1 * * * * *")
  28. public void sum2(){
  29. System.out.println("cron 每秒 当前时间:"+new Date());
  30. }
  31.  
  32. }

task

3、SpringBoot2.x异步任务实战(核心知识)
简介:讲解什么是异步任务,和使用SpringBoot2.x开发异步任务实战
1、什么是异步任务和使用场景:适用于处理log、发送邮件、短信……等
下单接口->查库存 100
余额校验 150
风控用户100
....

2、启动类里面使用@EnableAsync注解开启功能,自动扫描

3、定义异步任务类并使用@Component标记组件被容器扫描,异步方法加上@Async(可以注解到类)

流程:新建任务类注册到context,  controller成员属性注入任务类,   成员方法中执行任务类方法
注意点:
1)要把异步任务封装到类里面,不能直接写到Controller
2)增加Future<String> 返回结果 AsyncResult<String>("task执行完成");
3)如果需要拿到结果 需要判断全部的 task.isDone()
4、通过注入方式,注入到controller里面,如果测试前后区别则改为同步则把Async注释掉

  1. package net.xdclass.base_project.task;
  2.  
  3. import java.util.concurrent.Future;
  4.  
  5. import org.springframework.scheduling.annotation.Async;
  6. import org.springframework.scheduling.annotation.AsyncResult;
  7. import org.springframework.stereotype.Component;
  8.  
  9. /**
  10. * 功能描述:异步任务业务类
  11. *
  12. * <p> 创建时间:Apr 30, 2018 11:25:15 PM </p>
  13. *
  14. *@作者 小D课堂 小D
  15. */
  16. @Component
  17. //@Async
  18. public class AsyncTask {
  19.  
  20. public void task1() throws InterruptedException{
  21. long begin = System.currentTimeMillis();
  22. Thread.sleep(1000L);
  23. long end = System.currentTimeMillis();
  24. System.out.println("任务1耗时="+(end-begin));
  25. }
  26.  
  27. public void task2() throws InterruptedException{
  28. long begin = System.currentTimeMillis();
  29. Thread.sleep(2000L);
  30. long end = System.currentTimeMillis();
  31. System.out.println("任务2耗时="+(end-begin));
  32. }
  33.  
  34. public void task3() throws InterruptedException{
  35. long begin = System.currentTimeMillis();
  36. Thread.sleep(3000L);
  37. long end = System.currentTimeMillis();
  38. System.out.println("任务3耗时="+(end-begin));
  39. }
  40.  
  41. //获取异步结果
  42.  
  43. public Future<String> task4() throws InterruptedException{
  44. long begin = System.currentTimeMillis();
  45. Thread.sleep(2000L);
  46. long end = System.currentTimeMillis();
  47. System.out.println("任务4耗时="+(end-begin));
  48. return new AsyncResult<String>("任务4");
  49. }
  50.  
  51. public Future<String> task5() throws InterruptedException{
  52. long begin = System.currentTimeMillis();
  53. Thread.sleep(3000L);
  54. long end = System.currentTimeMillis();
  55. System.out.println("任务5耗时="+(end-begin));
  56. return new AsyncResult<String>("任务5");
  57. }
  58.  
  59. public Future<String> task6() throws InterruptedException{
  60. long begin = System.currentTimeMillis();
  61. Thread.sleep(1000L);
  62. long end = System.currentTimeMillis();
  63. System.out.println("任务6耗时="+(end-begin));
  64. return new AsyncResult<String>("任务6");
  65. }
  66.  
  67. }

AsynTask

  1. package net.xdclass.base_project.controller;
  2.  
  3. import java.util.concurrent.Future;
  4.  
  5. import net.xdclass.base_project.domain.JsonData;
  6. import net.xdclass.base_project.task.AsyncTask;
  7.  
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.web.bind.annotation.GetMapping;
  10. import org.springframework.web.bind.annotation.RequestMapping;
  11. import org.springframework.web.bind.annotation.RestController;
  12.  
  13. @RestController
  14. @RequestMapping("/api/v1")
  15. public class UserController {
  16.  
  17. @Autowired
  18. private AsyncTask task;
  19.  
  20. @GetMapping("async_task")
  21. public JsonData exeTask() throws InterruptedException{
  22.  
  23. long begin = System.currentTimeMillis();
  24.  
  25. // task.task1();
  26. // task.task2();
  27. // task.task3();
  28.  
  29. Future<String> task4 = task.task4();
  30. Future<String> task5 = task.task5();
  31. Future<String> task6 = task.task6();
  32. for(;;){
  33. if (task4.isDone() && task5.isDone() && task6.isDone()) {
  34. break;
  35. }
  36. }
  37.  
  38. long end = System.currentTimeMillis();
  39.  
  40. long total = end-begin;
  41. System.out.println("执行总耗时="+total);
  42. return JsonData.buildSuccess(total);
  43. }
  44.  
  45. }

controller

异步执行,拿回结果,

【SpringBoot】整合定时任务和异步任务的更多相关文章

  1. SpringBoot整合定时任务和异步任务处理 3节课

    1.SpringBoot定时任务schedule讲解   定时任务应用场景: 简介:讲解什么是定时任务和常见定时任务区别 1.常见定时任务 Java自带的java.util.Timer类        ...

  2. SpringBoot整合定时任务和异步任务处理

    SpringBoot定时任务schedule讲解 简介:讲解什么是定时任务和常见定时任务区别 1.常见定时任务 Java自带的java.util.Timer类 timer:配置比较麻烦,时间延后问题, ...

  3. 小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_41、SpringBoot定时任务schedule讲解

    笔记 1.SpringBoot定时任务schedule讲解     简介:讲解什么是定时任务和常见定时任务区别 1.常见定时任务 Java自带的java.util.Timer类            ...

  4. 【SpringBoot】SpringBoot2.x整合定时任务和异步任务处理

    SpringBoot2.x整合定时任务和异步任务处理 一.项目环境 springboot2.x本身已经集成了定时任务模块和异步任务,可以直接使用 二.springboot常用定时任务配置 1.在启动类 ...

  5. SpringBoot2.x整合定时任务和异步任务处理

    SpringBoot2.x整合定时任务和异步任务处理 一.项目环境 springboot2.x本身已经集成了定时任务模块和异步任务,可以直接使用 二.springboot常用定时任务配置 1.在启动类 ...

  6. SpringBoot整合定时任务----Scheduled注解实现(一个注解全解决)

    一.使用场景 定时任务在开发中还是比较常见的,比如:定时发送邮件,定时发送信息,定时更新资源,定时更新数据等等... 二.准备工作 在Spring Boot程序中不需要引入其他Maven依赖 (因为s ...

  7. SpringBoot整合全局异常处理&SpringBoot整合定时任务Task&SpringBoot整合异步任务

    ============整合全局异常=========== 1.整合web访问的全局异常 如果不做全局异常处理直接访问如果报错,页面会报错500错误,对于界面的显示非常不友好,因此需要做处理. 全局异 ...

  8. SpringBoot整合定时任务异步任务

    1.定时任务 1.开启定时任务 @SpringBootApplication //开启定时任务 @EnableScheduling public class SpringBootDemoApplica ...

  9. SpringBoot整合定时任务task

    @SpringBootApplication //扫描 mybatis mapper 包路径 @MapperScan(basePackages = "com.imooc.mapper&quo ...

随机推荐

  1. 深度学习环境搭建:Tensorflow1.4.0+Ubuntu16.04+Python3.5+Cuda8.0+Cudnn6.0

    目录 深度学习环境搭建:Tensorflow1.4.0+Ubuntu16.04+Python3.5+Cuda8.0+Cudnn6.0 Reference 硬件说明: 软件准备: 1. 安装Ubuntu ...

  2. 更改redhat7 yum源为centos

    1. 替换原系统中yum包, 检查初始的yum包有哪些 rpm -qa |grep yum 2. 删除原始的yum包. rpm -qa|grep yum|xargs rpm -e --nodeps 3 ...

  3. xml和tomcat介绍

    一 xml介绍: xml:可扩展性的文件 功能: 1.作为框架的配置文件 2.方便在网络中传输数据 <a> <b></b> <c></c> ...

  4. eslint详细配置

    vue-cli3按照官网教程配置搭建后,发现每次编译,eslint都抛出错误, 修改配置在 .eslintrc.js中修改   或者  关闭eslint 1.关闭eslint 直接注释掉package ...

  5. 快速高效实现微信小程序图片上传与腾讯免费5G存储空间的使用

    本文介绍了如何在微信小程序开发中使用腾讯官方提供的云开发功能快速实现图片的上传与存储,以及介绍云开发的 5G 存储空间的基本使用方法,这将大大提高微信小程序的开发效率 对于一般的图片上传功能开发,我们 ...

  6. 【转】阿里云免费SSL证书申请与安装使用(IIS7)

    阅读目录 准备: 第一步:免费SSL证书申请 第二步:证书导入 第三步:分配服务器证书 最后一步:访问测试 回到顶部 准备: 阿里云已完成备案的域名一个 回到顶部 第一步:免费SSL证书申请 登陆阿里 ...

  7. Linux下一个进程可以开多少线程

    这个问题,整理了一下网上的资料,结果如下: 一.ulimit -n可以查看一个进程最多可以打开多少文件描述符数: 二.一个进程最多可以产生多少线程,可用如下的方法: 32位linux系统最大内存地址4 ...

  8. configparser配置文件管理

    写入内容到配置文件 import configparser config = configparser.ConfigParser() #实例化一个configparser对象,config={} co ...

  9. ace-socket-reconnect

  10. VS2017调试技巧

    Visual Studio的调试技巧   调试技巧是衡量程序员水平的一个重要指标.掌握好的调试技巧与工具的使用方法,也是非常重要的.*** 演示环境: VS2017C#*** 演示用的代码: publ ...