使用spring / hibernate / flyway / postgresql填充数据库

时间:2020-03-29 23:02:24

标签: spring postgresql hibernate spring-boot flyway

我正试图用大约150个不同的值(每行一个)填充数据库。 到目前为止,我发现了两种不同的实现插入的方法,但是似乎都不是实现插入的最佳方法。

  • Flyway + Postgres:其中之一是创建迁移文件,并使用来自postgres的COPY命令,但为此,我需要授予超级用户权限对用户而言,这似乎不是一个好选择。

  • 春季启动:将data.sql文件放入带有大量插入内容的类路径中。如果我没看错,我将不得不编写150条insert into...语句。

在以前的项目中,我使用过liquibase,它有一个loadData命令,可以很方便地执行所声明的操作。您只需要提供文件,表名即可。您最终在表行中输入了csv文件值。

在飞行路线上有类似的方法吗?填充数据库的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

实际上,有一种方法,您可以在官方文档的page

中找到更多信息。

您还需要添加一些spring boot属性:

spring.flyway.enabled=true
spring.flyway.locations=classpath:/db/migration
spring.flyway.schemas=public

属性详细信息here

在我的情况下,请根据需要使用 R 个可重复使用的脚本,但要注意前缀 enter image description here

答案 1 :(得分:0)

Flyway是Liquidbase的直接竞争对手,因此,如果您需要跟踪迁移状态,管理分布式迁移(同一服务的许多实例同时启动,并且实际上只有一个实例应该执行迁移),请在启动时检查应该应用迁移并仅执行相关的迁移,以及先前从“迁移管理系统”获得的所有其他好处,然后应该使用Flyway而不是直接管理SQL。

Spring Boot与Flyway和Liquidbase都集成在一起,因此您可以将迁移内容放置在“ resources”文件夹中,定义几个属性,Spring Boot将自动运行Flyway。

例如,here可以找到Flyway与Spring Boot集成的教程。

由于flyway的迁移是SQL文件-您可以在其中放置任何所需的文件(我相信甚至是plSQL),它甚至可以管理每次迁移的事务,从而确保迁移具有“原子性”(全部或全部,没有部分迁移)。

因此,直接的方法是创建一个带有150个插入的SQL文件文件,并在春季通过飞行通道甚至通过maven运行它,具体取决于您的实际设置。

如果您想要更细粒度的控制并且SQL不够灵活,则可以用Java代码实现迁移。参见Official Flyway Documentation