最近在线上的项目中使用到apache的线程池请求数据,但是初次调用会非常慢,原因是池的初始化需要时间,见下图:
弊端:池的初始化和业务代码是同步的,影响用户体验。
解决方案:pool初始化代码和业务代码分离,在项目启动的时候就初始化。
Pool的初始化:其实加入池的任务Task,被调用的时候才能初始化,即想让Pool初始化,就得调用接口方法,让其初始化,至于参数的正确与否不重要,我们的目的是调用业务方法,让其初始化完成就行。
SpringBoot启动初始化代码:
@Component
@Slf4j
public class ApplicationRunnerImpl implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
log.info("-------初始化开始-------");
// 业务代码
Object object = .......
log.info("------初始化结束-----object = " + object);
}
}
END
Talk is cheap. Show me the code.
-----Linus Torvalds