Spring Boot&Liquibase示例

sme*_*eeb 3 database-migration liquibase spring-boot

Spring Boot和MySQL在这里.试图让我的Spring Boot应用程序使用Liquibase进行数据库迁移,并在文档中看到Spring Boot 内置了对Liquibase的支持.

但是在阅读完这些文档之后,我还有几个相关的问题:

  • db/changelog/db.changelog-master.yaml文件的基本目的是什么?是存储Liquibase配置(指示Liquibase的行为),还是我应该将实际的顺序SQL更改(" 迁移 ")本身放在哪里?
    • 理想情况下,我希望有一个src/main/resources/migrations目录并将我的迁移更改存储为单独的SQL文件,如下所示:
    • src/main/resources/migrations/001-schema.sql
    • src/main/resources/migrations/002-init.sql
    • src/main/resources/migrations/003-changing-account-types.sql
    • ...等等.是否可以通过Spring Boot配置Liquibase来实现这一目的?
  • Spring Boot什么时候运行这些Liquibase迁移?在app启动时?如果Spring Boot应用程序实际上在节点集群上运行(比如负载平衡URL后面的5个节点),该怎么办?将Spring Boot运行Liquibase运行5次,每个节点运行一次吗?或者它是否意识到一个节点是" 主迁移者 "等?

Jan*_*nar 8

db/changelog/db.changelog-master.yaml文件是使用默认配置时在应用程序启动时执行的文件.在该文件中,您可以进行顺序SQL更改以及对其他文件的包含.例如,该文件可能包含这样的包含(xml语法)

<include file="migrations/001-schema.sql"/> 
<include file="migrations/002-init.sql"/> 
<include file="migrations/003-changing-account-types.sql"/> 
Run Code Online (Sandbox Code Playgroud)

你会得到你想要的配置.

关于你的第二个问题 - 是的,它们是在启动时应用的.如果它在节点集群上运行,它们将分别检查状态并将更改应用于数据库(如果尚未应用)(数据库交换日志和数据库交换表用于此目的,并确保更改仅应用一次)

yaml语法的示例

databaseChangeLog:
- include:
    file: migrations/001-schema.sql
- include:
    file: migrations/002-init.sql
- include:
    file: migrations/003-changing-account-types.sql
Run Code Online (Sandbox Code Playgroud)