【问题标题】:Developing spring boot application with lower footprint开发占用空间较小的 Spring Boot 应用程序
【发布时间】:2016-08-31 06:04:01
【问题描述】:

为了保持我们在 spring-boot 中开发以在 Cloud Foundry 上运行的微服务的占用空间更小,我们正在寻找实现相同目标的最佳方法。

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

始终从最低限度的依赖项开始向上构建应用程序,并且仅在需要时添加更多内容,这无疑是最好的。是否有更多好的做法可以遵循以进一步缩小应用程序的大小?

【问题讨论】:

  • 你能告诉我们你目前拥有的依赖关系吗?为什么你认为它可以更小?当然,您知道可以做什么。生成的工件的大小是多少?里面的罐子是什么,最大的是什么?
  • 这不是关于“一个”应用程序,而是关于一般的弹簧(弹簧启动)应用程序。与 Python、Ruby 等其他语言相比,Java/Spring 和 Boot 中内置的人工制品相当大。因此,建议您了解最佳实践,以尽量减少。

标签: spring-boot


【解决方案1】:

以下是一些关于如何使用 Spring Boot 实现更小的占用空间的个人想法。您的问题过于宽泛,无法在任何其他情况下考虑这些建议。我不完全确定您在大多数情况下是否要遵循这些,它只是回答“如何实现更小的足迹”。

(1) 只指定需要的依赖项

我个人不会担心,但如果目标是占用空间更小,您可以避免使用starter-* dependencies。仅指定您实际使用的依赖项。

避免这种情况:

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

在我的示例项目中,生成的工件 with 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 的建议

(6) 另见:

【讨论】:

  • 很好的回复亚历克斯。谢谢。这种回复是我一直在寻找的。我想再等几天让更多人回复并添加,然后再接受您的回复作为最佳答案。
  • 关于避免使用starter-* 依赖项的第 1 点的几个问题:1) 在直接从 springframework 获取依赖项的同时,这不会使我的应用程序少一些 Spring-Boot 应用程序吗? & 2) 这让开发人员头疼地管理每个依赖项的版本,否则由 Spring-Boot 框架管理。
  • 启动器只是一个依赖的聚合器。所以导入 starter-data-jpa,实际上导入 spring-aop、aspectjweaver、tomcat-jdbc、tomcat-juli ......如果你自己导入你需要的东西,你最终可能会少一些依赖。我的帖子对此并不清楚:这些是减少占用空间的建议,但我个人不会担心,我更喜欢使用 starter-*。
  • 我同意,与使用 starter 相比,不使用 starter-* 依赖项时失去的灵活性太多了。此外,disabling AutoConfigurations you don't need 和 disable all unused Spring Boot Properties 也不是一件容易的事,因为每个人都有非常庞大的清单要经过和决定。这使得完美几乎是不切实际的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-23
  • 1970-01-01
  • 1970-01-01
  • 2019-04-15
  • 2017-12-14
  • 2021-09-13
相关资源
最近更新 更多