【问题标题】:Liquibase detects h2 as database even when h2 runs in MySQL mode [Spring boot]即使 h2 在 MySQL 模式下运行,Liquibase 也会将 h2 检测为数据库 [Spring boot]
【发布时间】:2018-11-22 23:46:14
【问题描述】:

我正在尝试使用 liquibase 和 h2(在 mysql 模式下)运行我的 Spring Boot 应用程序的测试。 Liquibase 更改日志是特定于 MySQL 的,所以我认为在 MySQL 模式下启用 liquibase 和 h2 进行测试可以解决问题。

问题是 Liquibase 没有将数据库检测为 MySQL,而是检测为 H2。因此,在执行迁移时,它使用了错误的数据类型,例如CLOB 而不是 TEXT,这会导致休眠验证器失败。

我需要知道是否有任何方法可以强制 liquibase 使用 MySQL 特定的迁移,而不管应用程序实际连接到的数据库是什么。不确定 liquibase 是如何计算数据库的,但我猜可能使用驱动程序名称或 db url?

如果有人有任何替代解决方案,请提出想法!

spring:
  profiles:
    active: test   
 datasource:
   url: jdbc:h2:mem:ebdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=MySQL
   username: sa
   password:
   driver-class-name: org.h2.Driver
 jpa:
   database-platform: org.hibernate.dialect.MySQL5Dialect
   database: MYSQL
   hibernate:
      ddl-auto: validate
liquibase:
  change-log: classpath:liquibase/liquibase-changeLog.xml
  enabled: true

【问题讨论】:

    标签: spring spring-boot integration-testing h2 liquibase


    【解决方案1】:

    如果我正确理解了您的问题,您可以将dbms="mysqldbms="h2" 属性添加到您的changeSet 中:

    <changeSet id="theId" author="theAuthor" dbms="mysql">

    这样,liquibase 将仅在您连接到 mysql 数据库时执行此 changeSet

    或者你可以加dbmscheck in preConditions

    <preConditions onFail="MARK_RAN">
        <dbms type="h2"/>
    </preConditions>
    

    【讨论】:

    • 不完全是。由于 liquibase 正在检测 H2,它会根据 H2 数据类型创建列。即使在 MySQL 模式下也会发生这种情况。我需要的是让 liquibase 检测和使用 MySQL 迁移命令,即使连接到 H2 也是如此。
    • @TahmidEkram,也许这个问题会帮助stackoverflow.com/questions/25364023/…
    猜你喜欢
    • 2019-01-26
    • 1970-01-01
    • 2019-09-06
    • 2019-05-17
    • 2018-01-11
    • 2019-02-02
    • 2018-06-13
    • 2017-08-01
    • 1970-01-01
    相关资源
    最近更新 更多