启动缓慢

举报
西魏陶渊明 发表于 2022/09/25 02:43:07 2022/09/25
【摘要】 启动缓慢分析 当应用中拥有大对象,可能会导致单侧启动比较慢,针对这种问题有不同的解决方案 # SpringBoot 2.2 解决方案 spring.main.lazy-initialization = true 1 SpringApplication 会自动添加一个叫 Lazy...

启动缓慢分析

当应用中拥有大对象,可能会导致单侧启动比较慢,针对这种问题有不同的解决方案

# SpringBoot 2.2 解决方案

spring.main.lazy-initialization = true
1

SpringApplication 会自动添加一个叫 LazyInitializationBeanFactoryPostProcessor的处理器

# SpringBoot 2.2 以前

给应用上下文提前装载一个类似的处理器,然后通过 BeanFactoryPostProcessor 在容器刷新前循环将 BeanDefinition 声明懒加载

public class BeanLazyApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {

    @Override
    public void initialize(ConfigurableApplicationContext applicationContext) {
        applicationContext.addBeanFactoryPostProcessor(new LazyBeanDefinitionPostProcessor());
    }

    public static class LazyBeanDefinitionPostProcessor implements BeanFactoryPostProcessor, Ordered {

        @Override
        public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
            for (String beanName : beanFactory.getBeanDefinitionNames()) {
                BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanName);
                if (beanDefinition instanceof AbstractBeanDefinition) {
                    beanDefinition.setLazyInit(true);
                }
            }
        }

        @Override
        public int getOrder() {
            return Ordered.HIGHEST_PRECEDENCE;
        }
    }

}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

测试引导类配置变更

  • @ContextConfiguration 通过容器初始化去新增处理器
  • @ActiveProfiles 指定测试环境激活的配置是local

@ContextConfiguration添加处理器

@Slf4j
@ActiveProfiles({"local"})
@ContextConfiguration(initializers = {BeanLazyApplicationContextInitializer.class})
// 使用Spring容器引导
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {CenterProviderApplication.class}) // 指定启动类
public class BaseApplicationTest {
    
}
1 2 3 4 5 6 7 8 9

# 如何确定版本?

Idea 中搜索 @SpringApplication 查看所在的包

文章来源: springlearn.blog.csdn.net,作者:西魏陶渊明,版权归原作者所有,如需转载,请联系作者。

原文链接:springlearn.blog.csdn.net/article/details/125858131

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。