一招让 Spring 本地测试弹射起步
开发过程中,在本地启动系统来进行一些测试、联调是很日常的操作。然而随着项目不断壮大,系统内会依赖越来越多的中间件或服务,例如 Rocket MQ、Dubbo、定时任务等。在系统启动的时候,需要对这些组件进行初始化,导致启动过程缓慢无比。 系统启动 5 分钟,测试运行 3 秒钟,这谁顶得住啊。而且在本地测试时,通常也用不到这些组件。 如果你也有同样的困扰,接下来就教你一招,利用 Spring 的扩展点 BeanFactoryPostProcessor,无侵入地“阉割”这些拖慢启动时间的组件,让你的系统一键弹射起步。 我们就以 Rocket MQ 为例,在启动的时候加载 5 个消费者。 public class RocketMQConfiguration { /** * SpringBoot 启动时加载所有消费者 */ @PostConstruct public void initConsumer() { Map<String, AbstractRocketConsumer> consumers = applicationContext.getBeansOfType(AbstractRocketConsumer.class); if (CollectionUtils.isEmpty(consumers)) { log.info("no consumers"); } for (String beanName : consumers.keySet()) { AbstractRocketConsumer consumer = consumers.get(beanName); consumer.init(); createConsumer(consumer); log.info("init consumer: title {} , topics {} , tags {}", consumer.consumerTitle, consumer.topics, consumer.tags); } } } 运行一下测试类,系统启动耗时 30 秒,其中 Bean 的初始化过程就占了 28 秒。...