接口业务异步处理

场景

比如我们在项目中的一个前端接口在每次调用的时候需要处理比较耗时且对结果不需要直接反馈的业务(比如需要多次调用第三方的http接口同步一些信息等),此时我们就需要将其设计成异步,以此来提高接口的响应速度。

处理方式

启动类

在我们的启动类上面加上开启异步的注解@EnableAsync

@SpringBootApplication
@EnableAsync
public class TestApplication {
    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }
}

异步任务类

@Async
作用在方法上,那这个方法就是异步的
作用在类上,那这个类的所有方法都是异步的

@Component
@Async
public class AsynsJob {
	public void synMethod(){
		try {
			//模拟业务处理
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
		System.out.println("我是异步方法");
	}
}

控制器

@RestController
@RequestMapping("device")
public class DeviceController {

	@Autowired
    private AsynsJob asynsJob;

	@PostMapping("test")
    public boolean save() {
    	asynsJob.synMethod();
    	System.out.println("我是控制器方法");
        return "成功";
    }
}

直接调用这个接口控制台的输出顺序将会是
“我是控制器方法”
“我是异步方法”
且接口的响应绝对不会等待上面设置的10秒睡眠时间之后才返回。

—————END—————
喜欢本文的朋友,欢迎关注公众号 BUG速递,分享程序员每天写出来的bug或工作中的问题
接口业务异步处理_第1张图片

你可能感兴趣的:(java,java)