Liquibase обнаруживает h2 как базу данных, даже когда h2 работает в режиме MySQL [Spring boot] - PullRequest
0 голосов
/ 13 июня 2018

Я пытаюсь запустить тесты моего приложения Spring Boot, используя liquibase и h2 (в режиме mysql).Изменения в Liquibase специфичны для MySQL, поэтому я подумал, что тестирование с включенной liquibase и h2 в режиме MySQL поможет.

Проблема в том, что Liquibase не определяет базу данных как MySQL, а как H2.Поэтому при выполнении миграции он использует неправильные типы данных, например, CLOB вместо TEXT, что впоследствии приводит к сбою средства проверки гибернации.

Мне нужно знать, есть ли способ заставить liquibase использовать специфичные для MySQL миграции независимо от базы данныхприложение на самом деле подключается к.Не знаете, как liquibase вычисляет базу данных, но я предполагаю, что, возможно, используя имя драйвера или 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

1 Ответ

0 голосов
/ 13 июня 2018

Если я правильно понял ваш вопрос, вы можете добавить атрибут dbms="mysql или dbms="h2" к вашему changeSet следующим образом:

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

Таким образом,liquibase выполнит это changeSet, только если вы подключены к базе данных mysql.

или вы можете добавить dbms проверку preConditions:

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