1.Configuration配置如下:
@Configuration
@EnableAsync
@Slf4j
public class TaskExecutorConfiguration implements AsyncConfigurer {
@Value("${corePoolSize}")
private String corePoolSize;
@Value("${maxPoolSize}")
private String maxPoolSize;
@Value("${queueCapacity}")
private String queueCapacity;
@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setCorePoolSize((NumberUtils.isDigits(corePoolSize)) ?Integer.parseInt(corePoolSize):5);
taskExecutor.setMaxPoolSize((NumberUtils.isDigits(maxPoolSize)) ?Integer.parseInt(maxPoolSize):15);
taskExecutor.setQueueCapacity((NumberUtils.isDigits(queueCapacity)) ?Integer.parseInt(queueCapacity):35);
return taskExecutor;
}
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return new SimpleAsyncUncaughtExceptionHandler();
}
}
2.异步方法
@Service
public class AsynTaskService {
@Async
public void executeAsynSendImageCommand(){
try {
Thread.sleep(8000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(234);
}
}
3.执行该异步方法时报如下错误:
java.lang.IllegalStateException: ThreadPoolTaskExecutor not initialized
4.解决方法,在configuration getAsynExecutor()方法里加上 taskExecutor.initialize();
@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.initialize();
taskExecutor.setCorePoolSize((NumberUtils.isDigits(corePoolSize)) ? Integer.parseInt(corePoolSize):5);
taskExecutor.setMaxPoolSize((NumberUtils.isDigits(maxPoolSize)) ?Integer.parseInt (maxPoolSize):15);
taskExecutor.setQueueCapacity((NumberUtils.isDigits(queueCapacity)) ? Integer.parseInt(queueCapacity):35);
return taskExecutor;
}