package yinhu.yinhu.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import yinhu.yinhu.yh.vo.AsyncTest; @Controller @EnableAsync public class AsyncController { @Autowired private AsyncTest asyncTest; @ResponseBody @GetMapping @RequestMapping(value="/async") public String test() { asyncTest.mywait(); System.out.println("wait"); return "ok"; } }
package yinhu.yinhu.yh.vo; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; @Component public class AsyncTest { @Async("taskExecutor")//自己配置的自定义线程池的名字(也就是带bean的方法名);也可以不要,不要的话就只能用框架自带的线程池 public void mywait() { System.out.println("------------------oh no"); // TODO Auto-generated method stub try { Thread.sleep(1000*10); System.out.println("线程名字"+Thread.currentThread().getName()); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("------------------oh yes"); } }
package yinhu.yinhu.yh.config; import java.util.concurrent.Executor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; @Configuration public class MyAsyncTaskThreadPool { private int poolsize=10; private int maxpoolsize=200; private int queueCapacity=10; @Bean public Executor taskExecutor() { ThreadPoolTaskExecutor threadPoolTaskExecutor=new ThreadPoolTaskExecutor(); threadPoolTaskExecutor.setCorePoolSize(poolsize); threadPoolTaskExecutor.setMaxPoolSize(maxpoolsize); threadPoolTaskExecutor.setQueueCapacity(queueCapacity); threadPoolTaskExecutor.setThreadNamePrefix("线程前缀名字"); threadPoolTaskExecutor.initialize(); return threadPoolTaskExecutor; } }
springboot异步处理请求并响应的方式
controller加@EnableAsync注解
组件类(如)中的方法上方加@Async注解