为了使我们的微服务(以Spring Boot方式开发)可以在Cloud Foundry上运行,并且占用空间较小,我们正在寻求实现这一目标的最佳方法。
朝这个方向的任何输入或指针将受到欢迎。
最好总是从最低限度的依赖关系开始向上构建应用程序,然后仅在需要时再添加。是否有更多可遵循的良好做法来进一步减小应用程序的大小?
以下是一些有关如何通过Spring Boot 缩小足迹的 个人想法。您的问题过于广泛,以致于在任何其他情况下都无法考虑这些建议。我不确定在大多数情况下是否要遵循这些原则,它只是回答“如何实现更小的占地面积”。
(1)仅指定必需的依赖项
我个人不会为此担心,但是如果目标是缩小占地面积,则可以避免使用starter-* dependencies。仅指定您实际使用的依赖项。
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