关于@SpringBootApplication的性能问题

关于@SpringBootApplication的扫包优化的文章,然后做了一个测试。
项目用的是spring boot 2.1.4,参考优化:https://www.cnblogs.com/cmfwm/p/7943756.html
网上大多数的文章都说默认注解带来方便的同时也带来了一些问题,如:
1、会导致项目启动时间变长。当启动一个大的应用程序,或将做大量的集成测试启动应用程序时,影响会特别明显。
2、会加载一些不需要的多余的实例(beans)。
3、会增加 CPU 消耗。
然后优化的过程是利用@Configuration,@Import注解进行指定自动装配,下面是两种不同的注解方式的监视图:

1.@SpringBootApplication扫包方式

在项目启动完之后的堆监视图:
在这里插入图片描述

可以看出图中的类加载数是10313,已使用堆内存的大小是241M,然后这个堆内存的使用情况会慢慢的随着时间不断的增大,当达到大概300M的时候就会进行一次gc,这个时候堆内存会降到70M左右。
项目启动时间:
在这里插入图片描述
时间大概在10秒左右

2.@Configuration,@Import装配

配置代码如下:

@Configuration
@Import({
        DispatcherServletAutoConfiguration.class,
        EmbeddedWebServerFactoryCustomizerAutoConfiguration.class,
        ErrorMvcAutoConfiguration.class,
        HttpEncodingAutoConfiguration.class,
        //HttpMessageConvertersAutoConfiguration.class,
        MultipartAutoConfiguration.class,
        ServletWebServerFactoryAutoConfiguration.class,
        RedisAutoConfiguration.class,
        AopAutoConfiguration.class,
        PropertyPlaceholderAutoConfiguration.class,
        WebMvcAutoConfiguration.class,
        WebSocketServletAutoConfiguration.class
})
@ComponentScan(basePackages = {"com.cntaiping"})
public class EditorServeApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(EditorServeApplication.class);
    }

    public static void main(String[] args) {
        ApplicationContext app = SpringApplication.run(EditorServeApplication.class, args);
    }

}

性能监视图如下:
在这里插入图片描述
可以看出图中的类加载数是9537,已使用堆内存的大小是231M,然后这个堆内存的使用情况也是和上面的情况一样,会慢慢变大。
项目启动时间:
在这里插入图片描述
启动时间在9秒左右。
所以综上的结果,第二种方式会比第一种方式的类加载数要少大概7~8百个,然后堆内存要少10M左右,启动时间要少大概1到两秒,个人是觉得没什么好优化的,直接用默认注解比较方便省事

### 回答1: @SpringBootApplication注解是Spring Boot应用程序的核心注解,它组合了以下三个注解:@Configuration,@EnableAutoConfiguration和@ComponentScan。它们为Spring Boot应用程序提供了自动装配和基础配置的功能。 ### 回答2: @SpringBootApplicationSpring Boot框架中的核心注解。它是一个复合注解,包含了多个注解的功能。 首先,@SpringBootApplication注解是一个组件扫描的开关,会自动扫描当前包以及子包下的所有组件,包括被@Configuration、@ComponentScan、@EnableAutoConfiguration注解修饰的类。这样就可以自动将组件(比如@Controller、@Service等)纳入Spring容器管理,无需配置xml文件。 其次,@SpringBootApplication注解还会自动启用Spring的自动配置功能。Spring Boot框架中内置了很多starter,这些starter包含了常用的第三方库的配置信息,比如数据库、Web、缓存等。当我们引入这些starter依赖后,他们就会根据项目中的配置和依赖自动进行相应的配置,无需手动编写大量的配置代码。 最后,@SpringBootApplication注解还会自动启用Spring Boot的特性,比如自动装配、Spring Boot Actuator等。自动装配是Spring Boot的重要特性之一,它简化了依赖注入的配置,通过一些约定大于配置的规则,可以实现将不同模块之间的依赖关系自动注入到Spring容器中。而Spring Boot Actuator是Spring Boot提供的监控和管理功能,可以通过HTTP接口或者JMX端口来获取应用的运行状态、性能指标、健康状况等信息,方便我们对应用进行监控和管理。 综上所述,@SpringBootApplication注解是Spring Boot框架中的核心注解,它包含了组件扫描、自动配置和特性启用等功能,简化了项目的配置和开发,提高了开发效率和系统的可管理性。 ### 回答3: @SpringBootApplicationSpring Boot框架中的核心注解之一。它是一个复合注解,包含了@Configuration、@EnableAutoConfiguration和@ComponentScan这三个注解的功能。 @Configuration注解表明该类是一个配置类,它可以替代传统的XML配置文件,用于定义配置bean的方法。在Spring Boot中,一般会将@Configuration注解用在主类上,表示这是一个配置类。 @EnableAutoConfiguration注解是开启自动配置的功能。通过@EnableAutoConfiguration,Spring Boot会根据项目的依赖和配置,自动地完成一系列的配置工作,如配置数据库连接、创建Web环境、配置Servlet容器等。这样可以大大简化了项目的配置工作,开发者只需要关注业务逻辑的编写即可。 @ComponentScan注解用于扫描指定包及其子包下的组件(如Controller、Service、Repository等),并将其注册为bean。被扫描的组件可以通过其他注解(如@Component、@Service、@Repository等)进行标识。通过@ComponentScan,Spring Boot可以自动地将这些组件加载到Spring容器中,使其可以被其他组件引用和调用。 综上所述,@SpringBootApplication注解的作用是将@Configuration、@EnableAutoConfiguration和@ComponentScan这三个注解的功能集成在一起,用于简化Spring Boot项目的配置和开发工作。通过使用@SpringBootApplication注解,开发者可以更加便捷地搭建和开发自己的Spring Boot应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值