有关创建 Java 项目的系列文章中的一篇文章(其他材料的链接位于最后)。其目标是分析关键技术,结果是编写一个电报机器人。在这一部分中,我们尝试启动SpringBoot和Flyway。 最少的理论量,随你喜欢)))我们无限期地省略了 Flyway/Liquibase 的最终比较,然后进入正题。即便如此,它已经拖延了。为了不重复描述 Flyway,我决定立即将其添加到我们未来的 JRTB 项目中。
多方面的、多模块的:
作为其中的一部分,我们需要做什么?
- 启动基于 Maven 的 SpringBoot 应用程序。
- 在那里添加 Flyway:幸运的是,它们很容易集成。
- 为示例数据库中的表添加架构。
什么是飞行路线
要使用某个东西,您首先需要弄清楚它是什么以及为什么。 Flyway是一个数据库版本控制工具。话虽耳熟能详,但不知何故还没有加上理解,对吧?让我们尝试描述一下 Flyway 解决的问题。假设我们有一个项目。就像我们世界上的一切一样,它并不完美,因此不可能规划和制定该项目的最终版本。每次都会出现某些未解释的细微差别。该项目在其工作中使用数据库。当然,如果项目发生变化,数据库结构也可能发生变化。假设我们为项目中的一个实体添加一个新字段。怎么做?- 将此字段添加到我们的实体中,更新所有内容以使业务逻辑正常工作。
- 更新数据库。唯一可能的方法是手动完成。为此,您需要进去注册必要的sql脚本。
- 但是,如果我们有多个地方部署项目,那么是否需要在每个地方都进行此操作?
- 如果我们想回去,我们如何准确地知道数据库结构现在处于什么状态?
- 我们如何确保数据库更改成功?
- 我怎样才能有机会跟踪项目中发生的所有数据库更改?
启动 SpringBoot + Flyway
什么是 Spring Boot
我们要推出什么?...要了解我们在做什么以及为什么要做,您需要确定 SpringBoot 是什么。首先,让我们快速(好吧,非常快地)谈谈Spring。目前,它是用 Java 开发服务器应用程序的事实上的行业标准。标准是什么?我该如何向你解释这一点?Spring 是应用程序的骨架,然后我们将“内容”(我们的业务逻辑)放到它上面。借助Spring(下文我将使用这张描图纸,以免浪费时间切换语言:D))Spring为我们提供了一个开始,我们从这里开始做所有的事情。它是- 您想使用数据库吗?你想要关系吗?你想要非关系型吗?我们在这里使用 Spring Data。
- 您想使用 http 请求吗?给你,Spring Web(Spring MVC)。
- 您是否需要一个容器将所有物品放在一个地方?这是 Spring 核心。
- 您是否需要在项目上设置安全性以便有不同的角色和命令链?春季安全。
- 正当你以为拥有这样的东西该多好时,事实证明 Spring 已经具备了你所需要的东西,而且它集成起来又快又容易。
启动 SpringBoot
既然我们已经了解了 Maven 是什么,那么让我们根据需要创建一个新项目。为此,您只需访问专门为此创建的网站即可。它称为Spring Initializr。在这里您需要填写并选择您需要的内容:- 项目构建工具是gradle或maven。正如您所看到的,Ant 甚至不再被提及。这是关于哪些构建工具值得您花时间的一个很好的提示。
- 你可以使用的语言是java、kotlin、groovy。这里一切都很简单:它们都是类似 JVM 且易于运行的 Java 代码。顺便说一下,Kotlin 值得一看。坦率地说,Groovy 已经变得无趣了(曾经有一段时间他们转向groovy,但很快就过去了)。
- Spring版本...这里需要了解Spring主体部分及其模块的版本是一致的。
- 项目数据。我已经描述过这些事情。
- 我们选择要收集的档案 - Jar 或 War。
- 嗯,我们最喜欢的 Java 版本。最近出现了很多这样的版本……他们等了很多年,现在一年有两个。
- Maven - 我们之前与您讨论过这一点并非毫无意义。
- Java 是我们的宠儿 :D
- 我们以 2.2.11 版本为例。为什么不是最新的呢?因为越新,出现 bug 的可能性就越大。对于我们来说,哪个版本并不重要,但旧版本会更可靠。因此,我们选择2.2.11。
- 组:com.github.javarushcommunity
- 神器:springboot-flyway-demo
- 名称:SpringBoot + Flyway 演示
- 描述:项目演示了 SpringBoot 和 Flyway 之间的集成。(是的,编写文档的能力是开发的重要组成部分:))
- 包名称:com.github.javarushcommunity.springbootflywaydemo。在这里,他们将立即为我们创建一个基本包,其中包含一个将启动我们的应用程序的类。
- 包装:罐装
- Java:8。我们不要走在机车前面,走好老八。为什么不是11?做什么的?对于我们的例子,我不明白这一点。
spring.datasource.url=jdbc:mysql://localhost:3306/flyway_demo_db
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
我们再次运行 main 方法并得到:现在我们需要添加至少一个迁移。要正确编写迁移,您需要采用以下模板:V<VERSION>__<NAME>.sql使用此模板,我们将在相应的文件夹中 创建名为V00001__Create_country_table.sql 的迁移文件: /src/main/resources/数据库.迁移/ . 让我们在其中创建一个国家/地区表。让我们采用第二篇有关数据库的文章中的脚本。在开始之前,我们先进去创建一个工作数据库:flyway_demo_db。让我们通过 MysqlWorkbench 来完成此操作:现在我们可以再次运行 main 方法:一切正常,但由于项目中还没有任何内容,因此它完成了工作。然而,从日志中可以清楚地看出(阅读日志是什么):
- 成功连接数据库。
- 迁移已经过验证,一切正常。
- Flyway 创建了一个表来管理迁移。
- 00001 号移民开始了——国家的创建成功了。
GO TO FULL VERSION