先看同步的情况:
AysncService.java
package com.gong.spingbootes.service; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; @Service public class AysncService { public void hello(){ try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("处理数据中");; } }
AysncController.java
package com.gong.spingbootes.controller; import com.gong.spingbootes.service.AysncService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class AsyncController { @Autowired AysncService aysncService; @ResponseBody @GetMapping("/hello") public String hello(){ aysncService.hello(); return "success"; } }
此时我们启动服务器,并输出localhost:8080/hello,会在3s之后响应的success。
此时,我们可以标识service方法为异步方法,即在AysncService中的hello方法上标识@Aysnc注解,同时在启动入口上标识@EnableAysnc注解:
package com.gong.spingbootes; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableAsync; @EnableAsync @SpringBootApplication public class SpingbootEsApplication { public static void main(String[] args) { SpringApplication.run(SpingbootEsApplication.class, args); } }
这时,我们再访问localhost:8080/hello,就不会在3s之后才响应了,而是立刻响应。