如何在特定的Spring配置文件中禁用Flyway?

85
现在我有一个使用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:

但是Flyway无论如何都会开始

5个回答

200

提供信息,对于任何寻求此内容的人,请注意:Spring Boot 2.0版本中的属性名称已更改

对于application.properties格式:

spring.flyway.enabled=false

对于 application.yml 格式:

spring:
    flyway:
        enabled: false

更新: 要禁用特定配置文件中的 Flyway,您可以将该属性放在特定于该配置文件的属性文件中。例如,如果您的配置文件名为 "abc",那么您可以将其放在 application-abc.properties 中。请查看Spring关于特定配置文件的文档以了解有关如何命名这些文件的更多信息。通常,格式为 application-{profileName}.properties


1
这不属于Spring。 飞行器: 启用: 假 - Tushar J Dudhatra
抱歉,我不明白您的评论。 - Todd
@gstackoverflow 请注意更新,我添加了一些评论和链接,介绍如何将属性应用于特定的配置文件。 - Todd
很高兴能帮到你 @gstackoverflow - Todd
1
或者,在 application.yml 中以下内容也是完全有效的:spring.flyway.enabled: false。如果不起作用,请尝试将 'false' 用引号括起来... - masterxilo

76

不适用于Spring Boot 2.X! 正确的答案在这里

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

Spring-Boot提供了一个属性flyway.enabled,默认值为true,可以用来禁用flyway。

您可以针对不同的配置文件设置特定的配置信息,例如您的情况应该命名为application-test.yml。如果活动档案是该名称,则此配置可以禁用flyway。您只需要按如下方式声明:

flyway:
  enabled: false

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


如果您只需要Flyway不发誓某些迁移未被应用,您可以使用spring.flyway.out-of-order = true。 - roma2341

8

如果您查看当前Spring Boot 2.x的官方文档:数据迁移属性并查找标签# FLYWAY,您将发现许多可帮助您的属性。

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

0

我有多个配置文件,例如:

  1. application-integration.yml
  2. 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

当我运行它时,它没有禁用Flyway迁移。我正在使用SpringBoot2.3.4。


-1
这是一个关于编程的内容。下面是翻译后的文本:

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

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

---

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

并不是真的。https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html 你要找的是 spring.profiles: "enable_flyway_profile"active 属性是用来定义哪个配置文件是激活的。 - TecHunter
1
@TecHunter,也许这会让你惊讶,但是那段代码在生产环境中成功运行。 - gstackoverflow
哦,好的,知道了!我也更喜欢你写的方式 :) 更加明确。 - TecHunter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接