一、添加开启异步注解:@EnableAsync
@EnableAsync
@SpringBootApplication
public class MApplication {
public static void main(String[] args) {
SpringApplication.run(MApplication.class, args);
}
}
二、配置单独线程池(可选)
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
@Configuration
public class TaskPoolConfig {
@Bean("taskExecutor")
public Executor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(10);
executor.setMaxPoolSize(20);
executor.setQueueCapacity(200);
executor.setKeepAliveSeconds(60);
executor.setThreadNamePrefix("taskExecutor-");
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
executor.initialize();
return executor;
}
}
三、需要异步调用的方法/类加上@Async注解
@Service
public class HService {
@Async("taskExecutor")//指定了taskExecutor线程池
public void send1() {
//TODO
}
@Async
public Future<String> send2() {
//TODO
return null;
}
}
完成!
注意事项:
1、该注解所在的类应该托管给spring容器管理
2、@Async修饰的方法不能是静态方法
3、调用者不能是同一个类的其他方法