如何理解十二要素方法论
本文翻译自 How To Understand Twelve-Factor Methodology In Spring Boot Applications,作者 OLEKSII
十二要素应用程序是构建现代可扩展应用程序架构所需的一系列原则。本篇文章将从 Spring Boot
应用的角度回顾这些原则。
一、代码库
应用程序在版本控制系统(如 Git
)中进行跟踪。
代码库和应用程序之间是一对一的关系。因此,每个 Spring Boot
应用程序都有自己的代码库。这些应用程序构成了一个分布式系统。多个部署(如测试、阶段、生产等)的代码是相同的。
二、依赖关系
在十二要素应用程序中,系统依赖关系是明确声明的。
在 Spring Boot 中,可以使用 Maven
或 Gradle
来实现这些目的。这些工具可用于指定所需的应用程序依赖关系。此外,跨依赖关系可能存在的问题也得到了解决。
三、配置
如前所述,每个应用程序只有一个代码库。但是,相同的代码会用于多个部署。因此,这些部署需要一些配置功能。
在 Spring Boot
中,属性可以用来解决这个问题。属性可以通过多种方式指定。例如,可以在 application.yml
文件中指定默认值。在环境变量的帮助下,每个部署都可以覆盖所需的属性。更多详情可参阅 Spring Boot
的文档。
四、 备份服务
每个应用程序都可以使用多个外部或第三方服务。
可以是数据库(如 MySQL
)、消息代理(如 Kafka
)、第三方 API 等。每个服务都应像资源一 样运行。这意味着,你的代码应同时在 Docker
中的 MySQL
和 AWS
中的 MySQL
上运行,而无需做任何更改。
在 Spring Boot
中,可以通过 Spring Boot
属性、特殊接口和类(如 Spring Data Repository
)来实现。
五、构建、发布、运行
十二要素方法需要三个不同的阶段,才能将源代码转化为运行中的应用程序。
构建
首先,将源代码转化为可执行文件。可以使用 Maven
或 Gradle
来构建目标 jar 文件。
发布
第二步,将可执行文件与特定配置相结合。例如,可以创建一个 Docker
镜像,将 jar 文件与所需配置相结合。
运行
在这一步中,可以创建一个 Docker
容器,根据上一步的映像运行应用程序。这意味着,在必要时,我们可以在不同版本的应用程序之间快速切换。如果当前版本有一些错误,可以使用之前的 Docker
镜像来运行应用程序。