Spring Boot 仍然是最先进的吗? - ralph

22-01-10 banq

Spring Boot构建可启动服务器的原有优势在当今容器环境时代似乎越来越成为劣势。您失去了灵活性,并冒着变得非常依赖库的风险,您作为开发人员无法监督其影响。相比之下,当今的现代应用程序服务器提供了容器技术的使用,使您能够在开发过程中使用类似生产的服务器系统。今天围绕你的微服务构建一个可启动的服务器已经没有意义了。
 
捆绑库的危险性最近在 Log4j 错误中变得清晰起来。像这样一个简单而典型的 Spring Boot 依赖项……

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


可能导致您的最终应用程序出现安全漏洞。由于 Log4j 库现在是您构建的一部分。要更新此依赖项,您需要更新代码并重建和推出Spring Boot应用程序。
相比之下,在Jakarta EE 中,您永远不会针对特定实现构建代码,而只会针对接口构建代码。这意味着您的代码以及最终的人工制品永远不会对特定实现产生硬编码依赖。在具体示例中,您只需更改运行时环境,无需更新或重建代码。这意味着对于像 Kubernetes 这样的容器环境,您只需更新镜像版本并重新启动容器。
 
Spring Boot构建了一个包含所有必要库的可引导工件,并为您提供了可引导服务器。不需要额外的运行时或应用程序服务器。这使得Spring Boot对开发人员如此有吸引力,并且是Spring Boot成功的最重要概念。但是这个概念是在 7 年多以前引入的。那个时候安装应用服务器很痛苦——尤其是对开发人员来说,而使用 Spring Boot,开发人员只需几个简单的步骤即可设置简单微服务的运行版本。
但是,今天我们已经确立了容器环境的概念。每个开发人员都可以使用一个简单的 Docker 命令启动任何类型的服务器或运行时环境。在容器环境中启动像PayaraWildflyOpenLiberty这样的现代应用程序服务器只需几秒钟,而部署微服务只需几秒钟。例如,要将您的微服务与最新的 Wildfly Docker 映像捆绑在一起,Dockerfile 如下所示:

FROM jboss/wildfly
ADD my-app.war /opt/jboss/wildfly/standalone/deployments/


可以在几秒钟内将微服务部署到不同的环境中。这为您的运行时环境提供了更大的灵活性。

1