最新公告
  • 欢迎您光临开源论坛,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • SpringBoot异步任务使用方法详解

    步骤,如图所示:

    SpringBoot异步任务使用方法详解

    1.添加异步任务业务类

    package top.ytheng.demo.task;
    
    import java.util.concurrent.Future;
    
    import org.springframework.scheduling.annotation.Async;
    import org.springframework.scheduling.annotation.AsyncResult;
    import org.springframework.stereotype.Component;
    
    //异步任务业务类
    @Component
    //标记此类是异步类,也可在方法中标记
    //不加,则类里面的方法为同步执行
    @Async
    public class AsyncTask {
    
      public void task1() throws InterruptedException {
        long begin = System.currentTimeMillis();
        Thread.sleep(1000);
        long end = System.currentTimeMillis();
        System.out.println("任务1耗时:" + (end - begin));
      }
      
      public void task2() throws InterruptedException {
        long begin = System.currentTimeMillis();
        Thread.sleep(2000);
        long end = System.currentTimeMillis();
        System.out.println("任务2耗时:" + (end - begin));
      }
      
      public void task3() throws InterruptedException {
        long begin = System.currentTimeMillis();
        Thread.sleep(3000);
        long end = System.currentTimeMillis();
        System.out.println("任务3耗时:" + (end - begin));
      }
      
      //测试拿到返回结果
      public Future<String> task4() throws InterruptedException {
        long begin = System.currentTimeMillis();
        Thread.sleep(1000);
        long end = System.currentTimeMillis();
        System.out.println("任务4耗时:" + (end - begin));
        return new AsyncResult<String>("任务4");
      }
      
      public Future<String> task5() throws InterruptedException {
        long begin = System.currentTimeMillis();
        Thread.sleep(2000);
        long end = System.currentTimeMillis();
        System.out.println("任务5耗时:" + (end - begin));
        return new AsyncResult<String>("任务5");
      }
      
      public Future<String> task6() throws InterruptedException {
        long begin = System.currentTimeMillis();
        Thread.sleep(3000);
        long end = System.currentTimeMillis();
        System.out.println("任务6耗时:" + (end - begin));
        return new AsyncResult<String>("任务6");
      }
    }

    2.添加测试控制器

    package top.ytheng.demo.controller;
    
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.Future;
    
    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;
    
    import top.ytheng.demo.task.AsyncTask;
    
    @RestController
    @RequestMapping("api/v1/async")
    public class TaskController {
    
      @Autowired
      private AsyncTask asyncTask;
      
      @GetMapping("/test")
      public Object test() throws InterruptedException, ExecutionException {
        long begin = System.currentTimeMillis();
        //asyncTask.task1();
        //asyncTask.task2();
        //asyncTask.task3();
        Future<String> result1 = asyncTask.task4();
        Future<String> result2 = asyncTask.task5();
        Future<String> result3 = asyncTask.task6();
        System.out.println("返回结果:" + result1.get() + "," + result2.get() + "," + result3.get());
        for(;;) {
          if(result1.isDone() && result2.isDone() && result3.isDone()) {
            break;
          }
        }
        long end = System.currentTimeMillis();
        long total = end - begin;
        System.out.println("总耗时:" + total);
        return "总耗时:" + total;
      }
    }

    3.添加启动类

    package top.ytheng.demo;
    
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.scheduling.annotation.EnableAsync;
    import org.springframework.scheduling.annotation.EnableScheduling;
    
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.web.servlet.ServletComponentScan;
    
    @SpringBootApplication //等于下面3个
    //@SpringBootConfiguration
    //@EnableAutoConfiguration
    //@ComponentScan
    //拦截器用到
    @ServletComponentScan
    //MyBatis用到
    @MapperScan("top.ytheng.demo.mapper")
    //定时使用(开启定时任务)
    @EnableScheduling
    //开启异步任务
    @EnableAsync
    public class DemoApplication {
    
      public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
      }
    }

    4.右键项目Run As启动,访问url

    http://localhost:8080/api/v1/async/test

    结果:

    SpringBoot异步任务使用方法详解

    开源论坛,我们只做源码的搬运工
    开源论坛 » SpringBoot异步任务使用方法详解

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    开源论坛
    一个高级程序员模板开发平台

    发表评论

    • 248会员总数(位)
    • 407资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 240稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情