springboot异步处理请求 结合自定义线程池

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注解

posted @ 2020-03-23 12:43  黑魔法os  阅读(1120)  评论(0编辑  收藏  举报