如何在某个弹簧配置文件中禁用飞路?

Posted

技术标签:

【中文标题】如何在某个弹簧配置文件中禁用飞路?【英文标题】:How to disable flyway in a certain spring profile? 【发布时间】:2017-11-01 10:31:35 【问题描述】:

现在我有一个使用 MsSQL 服务器的 spring-boot 应用程序。我们使用 flyway 进行迁移。

我想为测试添加额外的配置文件。我想从实体类生成表,而不是使用 flyway。

我试着在 application.yaml 中这样写

spring:
  profiles: test
  jpa:
      generate-ddl: true
      hibernate:
  datasource:
    url: jdbc:h2:mem:test_db;MODE=MSSQLServer
    username: sa
    password:

但无论如何都会开始飞行

【问题讨论】:

【参考方案1】:

仅供参考,对于任何来这里寻找这个的人,the property name has changed for Spring Boot 2.0:

对于application.properties 格式:

spring.flyway.enabled=false

对于application.yml 格式:

spring:
    flyway:
        enabled: false

更新:要在特定配置文件中禁用 flyway,您可以将该属性放在特定于该配置文件的属性文件中。例如,如果您的个人资料名为“abc”,您可以将其放入application-abc.properties。查看Spring's documentation on Profile-specific properties 以更清楚地了解如何命名文件。一般格式为application-profileName.properties

【讨论】:

这不是春天。 flyway:启用:false 对不起,我不关注你的评论。 @g*** 查看更新,我添加了一些关于如何将属性应用于特定配置文件的评论和链接。 很高兴它帮助了@g*** 或者,以下在application.yml 中完全有效:spring.flyway.enabled: false。如果它不起作用,请尝试将 'false' 放在引号中...【参考方案2】:

不适用于 Spring Boot 2.X !正确答案是 here。

如果您需要 Spring Boot 1.X 的答案,请继续阅读。

如果需要,spring-boot 有一个属性可以禁用 flyway flyway.enabled,默认情况下为 true。

你可以有一个配置文件特定的配置,在你的情况下它应该被命名为application-test.yml。如果配置文件处于活动状态,此配置可以禁用 flyway。您只需声明如下:

flyway:
  enabled: false

如果您在通用配置中指定测试配置文件,只需将其添加到它的根目录。

【讨论】:

如果只需要flyway不发誓不应用某些迁移,可以使用spring.flyway.out-of-order = true【参考方案3】:

JIC 带有当前 spring boot 2.x 的官方文档: Data migration properties 并查看标签 # FLYWAY,您会发现许多可以帮助您的属性。

spring.flyway.enabled=false # Whether to enable flyway.

【讨论】:

【参考方案4】:

这里是application.yaml 的示例,它定义了 2 个配置文件: 1. enable_flyway_profile - 启用飞路 2. disable_flyway_profile - 禁用飞路

spring:
  profiles:
    active: "enable_flyway_profile"
  flyway:
    enable: true
  ....

---

spring:
  profiles:
    active: "disable_flyway_profile"
  flyway:
    enable: false
  ....

【讨论】:

并非如此。 docs.spring.io/spring-boot/docs/current/reference/html/… 你要找的是spring.profiles: "enable_flyway_profile" active 属性是定义哪个配置文件是活动的 @TecHunter 可能会让您感到惊讶,但该代码在生产中成功运行 哦,好的,很高兴知道!我也更喜欢你写的方式:)更明确【参考方案5】:

我有多个个人资料,例如

    应用程序集成.yml application.yml

在 application.yml 中

spring:
  profiles:
    active: $ENVIRONMENT_NAME:local
  flyway:
    enabled: true
    user: $ORACLE_DB_USER:#null
    password: $ORACLE_DB_PASS:#null
    locations: classpath:db/migration
    url: $DB_URL:#null
    driver-class-name: oracle.jdbc.OracleDriver
    #    skipExecutingMigrations: true
    tablespace: MY_TABLESPACE_NAME
    baselineOnMigrate: true
    schemas: MY_SCHEMA_NAME

在 application-integration.yml 中

spring:
  flyway:
    enabled: false

当我运行它时,它不会禁用飞行路径迁移。我正在使用 SpringBoot2.3.4

【讨论】:

以上是关于如何在某个弹簧配置文件中禁用飞路?的主要内容,如果未能解决你的问题,请参考以下文章

如何从环境变量中添加活动弹簧配置文件?

如何强制弹簧只有一个活动配置文件?

在应用程序中禁用谷歌登录的弹簧安全性

当特定的弹簧配置文件处于活动状态时,如何防止运行测试?

Maven 配置文件属性不会覆盖弹簧配置中的值

弹簧配置文件和测试