返回介绍

10.3 提升应用的性能

发布于 2025-04-26 13:26:36 字数 3881 浏览 0 评论 0 收藏

Spring Boot 的自动配置在给我们提供很大便利的同时,难免会有一些副作用,即增加了应用启动的时间、一些内存和 CPU 的消耗等。如果应用对性能要求很高,就可以根据自动配置的原理,使用一些技巧进行优化。

10.3.1 更改加载配置的方式

如果能清楚一个应用需要哪些配置,就能够更改加载配置的方式,即不使用自动配置,而是改为指定加载一些应用所需的配置。

为了弄清楚一个应用需要加载哪些配置,可以使用 Maven 调试的方式来启动一个应用,然后从控制台的输出日志中,确定哪些是这个应用需要加载的配置类。下面使用第 1 章中简单的实例项目来说明这种操作。

首先,在 IDEA 的 Edit Configuration 中增加一个 Maven 配置,工作路径选择项目根目录,在命令行中输入:spring-boot:run–Ddebug,并把配置保存为 debug,如图 10-1 所示。

图 10-1 使用 Maven 调试的配置

以 Debug 方式运行 debug 配置,启动应用,然后在控制台中找出 Positive matches 的类,如代码清单 10-8 所示。Positive matches 就是这个应用所需加载的一些配置类。

代码清单 10-8 加载自动配置的 Positive matches 类列表

=========================
AUTO-CONFIGURATION REPORT
=========================
Positive matches:
-----------------
    DispatcherServletAutoConfiguration matched
        - @ConditionalOnClass classes found: org.springframework.web.servlet.
DispatcherServlet(OnClassCondition)
        - found web application StandardServletEnvironment (OnWebApplication
Condition)……





通过整理后,得出这个应用需要加载的配置类列表,如代码清单 10-9 所示。

代码清单 10-9 整理后的 Positive matches 类列表

Positive matches:
-----------------
    DispatcherServletAutoConfiguration matched
    EmbeddedServletContainerAutoConfiguration matched
    GenericCacheConfiguration matched
    HttpEncodingAutoConfiguration matched
    HttpMessageConvertersAutoConfiguration matched
    JacksonAutoConfiguration matched
    JmxAutoConfiguration matched
    MultipartAutoConfiguration matched
    NoOpCacheConfiguration matched
    RedisCacheConfiguration matched
    ServerPropertiesAutoConfiguration matched
    SimpleCacheConfiguration matched
    ThymeleafAutoConfiguration matched
    WebMvcAutoConfiguration matched
    WebSocketAutoConfiguration matched

根据这个配置类加载列表,就可以在主程序中使用注解 @Configuration 来代替注解 @SpringBootApplication,并用注解 @Import 指定需要加载的配置类,经过更改后的应用主程序如代码清单 10-10 所示。

代码清单 10-10 主程序中指定加载的配置类

@Configuration
@Import({
        DispatcherServletAutoConfiguration.class,
        EmbeddedServletContainerAutoConfiguration.class,
        ErrorMvcAutoConfiguration.class,
        HttpEncodingAutoConfiguration.class,
        HttpMessageConvertersAutoConfiguration.class,
        JacksonAutoConfiguration.class,
        JmxAutoConfiguration.class,
        MultipartAutoConfiguration.class,
        ServerPropertiesAutoConfiguration.class,
        PropertyPlaceholderAutoConfiguration.class,
        ThymeleafAutoConfiguration.class,
        WebMvcAutoConfiguration.class,
        WebSocketAutoConfiguration.class
})
@RestController
public class Application {
    @RequestMapping("/")
    String home() {
        return "hello";
    }
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

10.3.2 将 Tomcat 换成 Jetty

另外,为了提高应用的性能,还可以更改默认使用的 Tomcat 插件,换成更加小巧的 Jetty 插件。例如,代码清单 10-11 是在工程的 Maven 配置中排除引用默认的 Tomcat,转而引用 Jetty 的依赖。

代码清单 10-11 使用 Jetty 的 Maven 配置

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>
</dependencies>

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。