使用 Ktor + Exposed (Kotlin) 进行数据库迁移的推荐方法是什么?

Adi*_*and 7 sql database migration kotlin

Ktor 或 Exposed 框架没有任何内置的数据库迁移支持。推荐的方法是什么?

use*_*304 14

如果您将 Ktor 与 Gradle 一起使用,我建议您在应用程序的入口点内以编程方式使用 Flyway。这样,它就可以轻松成为持续交付管道的一部分。您可以在此处查看使用 API 的 Flyway 文档:https ://flywaydb.org/documentation/api/

我本质上做的是添加依赖项(使用 Kotlin DSL):

    implementation("org.flywaydb:flyway-core:6.5.2")
Run Code Online (Sandbox Code Playgroud)

然后您需要做的就是创建一个 Flyway 实例并在加载模块时调用 migrate:

fun Application.module() {

  Flyway.configure().dataSource(/*config to your DB*/).load().migrate()

  //the rest of your application
  routing {

  }
}
Run Code Online (Sandbox Code Playgroud)

You could of course extract the creation of Flyway to your DI tool (e.g. Koin) and add some logging to show progress.

This way your DB will be migrated (if necessary) every time just before your app is started.

As for writing up the actual migration the official docs are very helpful. What you essentially need to do is:

  1. Make sure you have the required directory for migration files - src/main/resources/db/migration by default ).
  2. 在上述目录中的单独迁移文件中编写纯 SQL。文件名也需要遵守约定(默认情况下:以大写字母开头V,然后是一个数字,您将在每次新迁移时增加该数字,双下划线- 这在开始时欺骗了我;) - 以及蛇形描述,例如V1__Create_person_table.sql
  3. 运行应用程序并观察魔法:D


jho*_*nna 3

数据库表在部署时通过 Flyway 进行迁移,并且可以在 db/migrations 文件夹中添加脚本来添加新表或执行查询,例如在服务器启动时插入数据等。(https://github.com/arun0009/kotlin-ktor-exposed-sample-api

Flyway 的工作原理如下: https: //flywaydb.org/getstarted/how

  1. 下载、安装和配置 Flyway(请参阅https://flywaydb.org/getstarted/firststeps/commandline
  2. 将其指向数据库,该数据库将是 Flyway_schema_history 的位置
  3. 按照命名约定编写用于创建表或插入数据的迁移文件:V<version number>__<migration description>并运行flyway migrate
  4. 按照命名约定编写可重复的迁移文件以创建视图:R__<migration description>并运行flyway migrate
  5. 按照命名约定编写删除表或删除数据的撤消迁移文件:V<version number>__<migration description>并运行flyway migrate
  6. 检查您的迁移状态并flyway info提交您的文件(如果您满意)
  7. 进行任何必要的修改后重新运行迁移。重复并提交。