一尘不染

开发占地面积更小的Spring Boot应用程序

spring-boot

为了使我们的微服务(以Spring Boot方式开发)可以在Cloud Foundry上运行,并且占用空间较小,我们正在寻求实现这一目标的最佳方法。

朝这个方向的任何输入或指针将受到欢迎。

最好总是从最低限度的依赖关系开始向上构建应用程序,然后仅在需要时再添加。是否有更多可遵循的良好做法来进一步减小应用程序的大小?


阅读 293

收藏
2020-05-30

共1个答案

一尘不染

以下是一些有关如何通过Spring Boot 缩小足迹的
个人想法。您的问题过于广泛,以致于在任何其他情况下都无法考虑这些建议。我不确定在大多数情况下是否要遵循这些原则,它只是回答“如何实现更小的占地面积”。

(1)仅指定必需的依赖项

我个人不会为此担心,但是如果目标是缩小占地面积,则可以避免使用starter-* dependencies。仅指定您实际使用的依赖项。

避免这种情况

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

在我的示例项目中, 使用starter- 依赖项生成的工件 约为25MB*

这样做

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-jpa</artifactId>
</dependency>

在我的样本项目中, 没有starter- 依赖项的工件 约为15MB*

(2)排除自动配置

排除不需要的自动配置:

@Configuration
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class MyConfiguration {
}

(3)Spring Boot属性

尽可能在application.properties中禁用(同时确保它也没有负面影响):

spring.main.web-environment=false
spring.main.banner-mode=off
spring.jmx.enabled=false
server.error.whitelabel.enabled=false
server.jsp-servlet.registered=false
spring.freemarker.enabled=false
spring.groovy.template.enabled=false
spring.http.multipart.enabled=false
spring.mobile.sitepreference.enabled=false
spring.session.jdbc.initializer.enabled=false
spring.thymeleaf.cache=false
...

(4)明智地选择嵌入式Web容器

如果使用嵌入式Web容器启动spring boot,则可以选择其他容器:

(5)Spring的建议

  • 记忆: java -Xmx32m -Xss256k -jar target/demo-0.0.1-SNAPSHOT.jar
  • 线程数: server.tomcat.max-threads: 4
  • 来源:spring-boot-memory-performance
2020-05-30