原创

SpringBoot整合异步操作


其实在SpringBoot中整合异步功能非常简单,只需两步

第一步:

在项目里创建一个AsyncServer类
package com.juju.springboottest.service;

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

@Service
public class AsyncService {
    public void hello(){
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("数据正在处理。。。");
    }
}

这个类大家可以看到他使用了线程休眠,每次调用他的时候都休眠三秒然后再输出数据正在处理
然后再创建一个AsyncController类在项目运行在服务器上时来调用这个方法
package com.juju.springboottest.controller;

import com.juju.springboottest.service.AsyncService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class AsyncController {
    @Autowired
    AsyncService asyncService;

    @RequestMapping("/hello")
    public String hello(){
        asyncService.hello();//停止三秒,转圈,等待系统唤醒
        return "ok";
    }
}

上面的代码大家也可以看到:我们在地址栏里输入:hello的时候他调用的事AsyncService层里的hello方法,而调用hello方法时线程会休眠3秒再往下走,也就是说:从地址栏里输入hello后,3秒后才返回ok的字符串在网页中,那怎么才能让他不等这三秒,直接返回ok呢?我们接着往下看
我们先在AsyncService里添加一个注解:@Async,告诉Spring这是一个异步方法,加完这个注解后再在SpringBoot的启动方法中加上@EnableAsync 开启异步方法的注解
加完注解的AsyncService类:
package com.juju.springboottest.service;

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

@Service
public class AsyncService {
    //告诉Spring这是一个异步的方法,除了这个还要在Main方法里加上@EnableAsync,开启异步功能
    @Async
    public void hello(){
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("数据正在处理。。。");
    }
}
SpringBoot的启动方法长这样:
package com.juju.springboottest;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;

@EnableAsync    //开启异步功能的注解
@EnableScheduling  //开启定时功能的注解: 使用注解要在这加个@EnableScheduling注解和在Service层里加个注解@Scheduled
@SpringBootApplication
public class SpringbootTestApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootTestApplication.class, args);
    }

}
未加异步注解前:
  • 每一次在输入框中输入:hello的时候,都要转三秒才返回OK,同时在控制台输出:数据正在处理。。。
加了异步注解后:
  • 在输入框中输入hello后,立马弹出ok,三秒后才在控制台输出:数据正在处理。。。
SpringBoot
基础
随笔
  • 作者:JarvisYang(联系作者)
  • 发表时间:2020-07-23 03:11
  • 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
  • 评论