gpt4 book ai didi

spring - 如何使用 Spring 配置文件设置 Flyway 迁移文件位置

转载 作者:行者123 更新时间:2023-12-03 16:03:18 25 4
gpt4 key购买 nike

我有两个 Spring 配置文件 devtest为开发和测试环境配置。在每个环境中,我都使用不同的数据库,即 h2在开发和 postgresql在测试中。以下是我的每个配置文件的属性文件,其中 {vendor}由 spring boot 解析为 h2postgresql分别根据配置的数据源。

应用程序-dev.properties

spring.flyway.locations=classpath:db/migration/{vendor}

application-test.properties
#Data source
spring.datasource.url=jdbc:postgresql://localhost:5432/test
spring.datasource.username=postgres
spring.datasource.password=postgres
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect

#Flyway
spring.flyway.check-location=false
spring.flyway.locations=classpath:/db/migration/test/{vendor}

用于 dev 的 Flyway 迁移文件个人资料在 test/resourcestest个人资料 main/resources
enter image description here

enter image description here

当我使用 test 运行我的应用程序时,这工作正常仅在 main/resources 下选择迁移文件的配置文件.但是,当我使用 dev 运行我的单元测试时轮廓。我希望它只选择 src/test/resources/db/migration/h2 下的文件.但是 Flyway 正在从 main/resources 获取迁移文件和 test/resources两者都会导致错误

org.flywaydb.core.api.FlywayException: Found more than one migration with version 1



我不明白这种行为。有关如何解决此问题的任何输入?

最佳答案

所以,这就是我如何做到的。

要求:

  • 使用 Spring 配置文件为不同的环境配置应用程序,即 dev , testprod .
  • 使用 Spring 配置文件根据环境加载 flyway 迁移文件。

  • 每个环境的数据库:
  • H2 dev 的数据库环境。
  • postgresql test 的数据库环境。
  • postgresql prod 的数据库环境。

  • 配置
  • 创建 Spring 配置文件 dev , testprod在 pom.xml 中。
    <profiles>
    <profile>
    <id>dev</id>
    <activation>
    <activeByDefault>true</activeByDefault>
    </activation>
    </profile>
    <profile>
    <id>test</id>
    </profile>
    <profile>
    <id>prod</id>
    </profile>
    </profiles>
  • 为每个配置文件创建属性文件

  • 应用程序-dev.properties
    spring.flyway.locations=classpath:db/migration/{vendor}

    从, H2当 H2 驱动程序在类路径上时,数据库由 Spring boot 配置。我们不需要显式配置它。

    application-test.properties
    spring.datasource.url=jdbc:postgresql://localhost:5432/db_test
    spring.datasource.username=postgres
    spring.datasource.password=postgres
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect

    spring.flyway.locations=/db/{vendor}/common,/db/{vendor}/test

    application-prod.properties
    spring.datasource.url=jdbc:postgresql://localhost:5432/db_prod
    spring.datasource.username=postgres
    spring.datasource.password=postgres
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect

    spring.flyway.locations=/db/{vendor}/common,/db/{vendor}/prod
  • Flyway 迁移文件位置。

  • 如果你会注意到,我没有用过 db/migrationsrc/main/resources放置迁移文件,这是默认位置。原因很简单,Flyway 会选择该位置下的所有文件,这会导致不同环境下文件之间的版本冲突。例如 V2__data_insertion.sql所有三种环境都存在,如果这些环境嵌套在 db/migration 下,这将不起作用。 .从, H2迁移文件属于默认配置文件,我将它们留在默认的 flyway 迁移文件位置。

    enter image description here

    enter image description here

    希望有帮助!!!

    关于spring - 如何使用 Spring 配置文件设置 Flyway 迁移文件位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59532496/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com