我们有一个Java Spring Boot应用程序,使用hibernate和PostgreSQL数据库,并且希望使用flyway进行版本控制。我们已经弄清楚了如何使用flyway本身并配置hibernate来创建包含数据库设置的sql文件。我们还没有弄清楚如何让hibernate创建最小的sql文件来描述新旧模式之间的差异,这些文件将用作迁移脚本。最重要的是,我们没有弄清楚是否有一种方法可以使整个迁移过程自动化。
我们阅读了大量的文档和stackoverflow问题。没有一个很好地解释了如何建立我们所要求的行为。这个问题最接近我们想要实现的目标,但解释了用flyway+Hibernate不可能完成这样的行为。尽管这个问题已经有三年的历史了,但我们希望它现在能行得通?
我们当前关于hibernate的spring配置如下所示:
spring:
jpa:
properties:
hibernate:
dialect: org.hibernate.dialect.PostgreSQL95Dialect
hbm2ddl:
delimiter: ;
javax:
persistence:
schema-generation:
create-source: metadata
create-database-schemas: true
scripts:
action: create
create-target: src/main/resources/ddl_hibernate_creation.sql
它生成了一个模式创建sql。但这在升级模式时是不够的。
正如前面所解释的,我们期待找到一种至少半自动化整个迁移过程的方法(hibernate至少应该创建一个适当的“diff”文件,可以手工应用于生产/开发)。
您可以对脚本操作使用update
来生成diff脚本。它会将从代码生成的模式与数据库中的模式进行比较,因此在生成新的迁移之前,请确保应用所有现有的迁移。而且,它不会检测到所有的变化,所以仍然需要自己做审查。最好也生成create脚本来检查差异。
若要使其成为半自动配置,可以将此配置放在不同的配置文件中。使用新配置文件运行以生成迁移。将脚本复制到您预期的位置。
配置示例:
spring:
profiles: migration
jpa:
properties:
javax:
persistence:
schema-generation:
create-source: metadata
scripts:
action: update
create-target: src/main/resources/ddl_hibernate_migration.sql
我想使用 Flyway 获取特定数据库的最新架构版本值。Flyway 中是否有函数可以在命令行中获取当前架构版本号? 我可以运行以下命令: 这为我提供了数据库的整个架构内容(缩短),如下所示: 我只对最后一个架构条目版本“1.5.9”值感兴趣。 我的环境如下: < li>Windows 7 < li>Flyway 3.0
我想将这个Spring属性文件用于数据库配置。 代码运行良好,但不幸的是,当删除所有表后数据库为空时,我会收到SQL错误,因为首先执行迁移脚本。 如何先配置 JPA 以创建表,然后再执行迁移脚本?
我认为留档(http://flywaydb.org/getstarted/existingDatabaseSetup.html)不够清楚,希望用一个例子来说明。我有一个给你: 假设我们有两个不同版本的生产数据库(1和2),其模式版本是隐式的,但通过查询现有表来确定。然后,我们将如何实现文档中描述的内容? 在我的例子中,两个版本都附加了一个脚本:版本1:创建表版本2:创建表 我已经创建了与版本1和版
编辑:我可以从flyway命令行工具运行相同的配置,但不能从ant任务运行。 我有一个flyway配置,可以在我的oracle数据库上运行。我正在SQL Server数据库上设置flyway。当我尝试任何蚂蚁任务时,Flyway会挂起。包括用于测试与数据库连接的信息。 当我运行Flyway时,它似乎挂起来了。当执行任何ant任务时,详细日志将以“[flyway:info]DDL Transacti
创建迁移脚本 生成一个迁移脚本框架 让我们从创建一个新的 Phinx 迁移脚本开始。使用 create 命令: $ php vendor/bin/phinx create MyNewMigration 这将创建一个新的迁移脚本,格式是 YYYYMMDDHHMMSS_my_new_migration.php ,前14个字符是当前的timestamp,精确到秒。 如果你指定了多个脚本路径,将会提示你
如何管理处理相同数据库模式的多个项目。如果被另一个项目修改,每个项目中的Flyway迁移脚本不允许启动。 例如: 我有一个带有FlywayInitializer类的spring boot项目X。 我有一个子模块Y,还有他自己的FlywayInitializer类 项目结构: 如何对项目X和Y使用与Flyway相同的schemaname“schema1”? 编辑:谢谢@jesper\u bk对我的帮