- 前言
- 第一部分 基础应用开发
- 第 1 章 Spring Boot 入门
- 第 2 章 在 Spring Boot 中使用数据库
- 第 3 章 Spring Boot 界面设计
- 第 4 章 提高数据库访问性能
- 第 5 章 Spring Boot 安全设计
- 第二部分 分布式应用开发
- 第 6 章 Spring Boot SSO
- 第 7 章 使用分布式文件系统
- 第 8 章 云应用开发
- 第 9 章 构建高性能的服务平台
- 第三部分 核心技术源代码分析
- 第 10 章 Spring Boot 自动配置实现原理
- 第 11 章 Spring Boot 数据访问实现原理
- 第 12 章 微服务核心技术实现原理
- 附录 A 安装 Neo4j
- 附录 B 安装 MongoDB
- 附录 C 安装 Redis
- 附录 D 安装 RabbitMQ
- 结束语
10.3 提升应用的性能
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>
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论