我希望我的应用程序在运行时使用 r2dbc 驱动器,并使用 jdbc 使用 Liquibase 处理数据库。我有this作为参考。可以通过在
application.properties
和 build.gradle.kts
内添加正确的配置来实现这一点。更新后一切正常,但不是自动的。你有什么建议吗?Spring的参考
您有两种选择在 R2bc 应用程序中使用数据库迁移(例如 Liquibase)。
到目前为止,Liquibase 还不支持 R2dbc,并且默认情况下 R2dbc 和 Jdbc 无法在单个 Spring boot 应用程序中激活。在响应式 Spring Boot 应用程序中,虽然您添加了 Jdbc 启动器,但默认情况下它并未激活。
但是您可以在 R2dbc 应用程序中设置 liquibase,并配置 Liquibase Maven/Gradle 插件以通过 Gradle 任务/Maven 目标手动迁移数据库。请参阅我的示例:liquibase-maven-r2dbc,确保数据库正在运行,然后在项目根目录中执行
mvn liquibase:update
。
请参阅 Liquibase Maven 插件的官方指南,https://docs.liquibase.com/tools-integrations/maven/workflows/using-liquibase-maven-plugin-and-springboot.html
如果您的数据库迁移脚本位于项目之外(或者作为特定项目仅包含脚本),并且由 dbamin 或通过 CI/CD 管道维护,Liquibase/flyway 都提供独立的 CLI 工具。 CLI 是一个不错的选择。因此它将脚本与您的主项目分开。
直接使用R2dbc Migrate,它与Flyway类似,但与2rdbc一起使用。请参阅我的示例:r2dbc-migrate。
更新:在最新的 Spring Boot 3.x 中,似乎可以在 WebFlux 项目中设置 Liquibase/flyway,您必须添加 jdbc 驱动程序并设置连接配置(不要使用数据源)。但我想使用指定为响应式堆栈的 R2dbcMigrate。