spring进阶教程(二):异步执行任务

前言

实际开发中,大多数的service都是同步执行并返回的,但有些特殊情况,我们是不需要马上得到返回结果,例如:数据量较大的报表统计,可能会执行一两个小时,我们只需要开一个异步任务即可,spring也为我们提供了这样的方式,下面我们来看一看他的实现

参考项目:https://github.com/bigbeef/cppba-sample
开源地址:https://github.com/bigbeef
个人博客:http://blog.cppba.com

注意:框架采用spring-boot,配置和启动类就不列出了,需要了解的可以看下面的参考项目,下面只提供核心代码

StartService.java

package com.cppba.service;

import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

@Service
public class StartService {

    @Async
    public void taskSayHi(Integer i) {
        System.out.println("hi! No. " + i + "!");
    }

    @Async
    public void taskSayHello(Integer i) {
        System.out.println("hello! No. " + i + "!");
    }
}

StartController.java

package com.cppba.controller;

import com.cppba.service.StartService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@EnableAsync
public class StartController {

    @Autowired
    private StartService startService;

    @RequestMapping("/start")
    @ResponseBody
    public String start(){
        Integer count = 10;
        for (Integer i = 1; i <= count; i++) {
            startService.taskSayHi(i);
            startService.taskSayHello(i);
        }
        return "success";
    }
}

运行项目

项目启动,浏览器访问http://127.0.0.1:8080/start,控制台打印出一下内容:

No.1,hello!
No.10,hi!
No.7,hi!
No.8,hello!
No.6,hi!
No.10,hello!
No.7,hello!
No.5,hi!
No.1,hi!
No.6,hello!
No.4,hi!
No.8,hi!
No.5,hello!
No.3,hi!
No.9,hello!
No.4,hello!
No.2,hi!
No.9,hi!
No.3,hello!
No.2,hello!

很明显,程序并没有按照我们的调用顺序执行,说明我们的异步服务开启成功!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,010评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,974评论 6 342
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,666评论 25 708
  • 显现-练习——使用 我行,一切行,我行任之行 选好人,做对事 懂人事 体验价值从满足身边人的需求开始 日精进第...
    于英彬阅读 140评论 0 0
  • 一部电影的好坏,由许多方面所决定,比如摄影、剧本、演员、价值观,思想等等。而在我心中,所谓一部“好”电影,更应该看...
    土豆有时说阅读 399评论 0 0