Как использовать общие файлы миграции для mysql и h2

Я использую базу данных h2 для тестового примера и базу данных mysql в качестве основной БД. Могу ли я поддерживать миграцию по одному пролетному пути для обоих.

Я использую структуру Springboot.

приложение-mysql.properties:

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.password=root
spring.datasource.url=jdbc:mysql://localhost:3306/shipment-planning?useSsl=true
spring.datasource.username=root

spring.flyway.default-schema=shipment-planning
spring.flyway.enabled=true

spring.jpa.hibernate.ddl-auto=none
spring.jpa.show-sql=true
spring.flyway.locations = h2/db/migration

приложение-h2.properties

spring.h2.console.enabled=true
spring.h2.console.path=/h2-console

spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=MYSQL

spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=sa
spring.flyway.enabled=true
spring.flyway.locations = h2/db/migration

одна из синтаксических ошибок, которые я получил при запуске с Mysql.properties

«У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, чтобы найти правильный синтаксис для использования рядом с «ТИП ДАННЫХ ТЕКСТ» в строке 2»

🤔 А знаете ли вы, что...
Java используется в большом количестве крупных корпоративных приложений и систем.


50
2

Ответы:

Решено

Не гарантируется, что используя разные базы данных, вы сможете использовать одни и те же скрипты.

Если ваши сценарии сложны, поскольку в них активно используются расширенные функции базы данных, такие как специальные индексы, табличные пространства, типы данных, ваши сценарии наверняка не смогут быть выполнены как в H2, так и в MySql.

Учитывая, что у вас есть три способа справиться с этим:

  • создайте очень простые скрипты, не использующие какие-либо особенности базы данных, в одном каталоге и проверьте, что они могут работать с обеими базами данных.
  • создайте два каталога (один для H2 и один для MySql) и продублируйте скрипты, адаптируя их для каждой базы данных.
  • смешайте два решения, имеющие общие каталоги для сценариев, которые могут выполняться в обеих базах данных, и один каталог для каждой базы данных, со сценариями, которые используют расширенные функции этой базы данных и которые не могут использоваться совместно.

Это невозможно. Как только запросы станут сложными, вы столкнетесь с проблемами.

Вы можете разделить их по разным папкам и указать в своих тестах использование сценариев миграции в соответствии с поставщиком базы данных. У вас может быть папка для файлов миграции MySQL в /mysql и файлов h2 в /h2.

Использование другой базы данных для ваших тестов также является плохой практикой. Я рекомендую использовать тест-контейнеры, поскольку они позволят вам запускать докер-контейнеры во время ваших тестов. Это означает, что у вас может быть экземпляр mysql, который будет запускаться при запуске теста и закрываться после его завершения, что устраняет проблему, с которой вы сталкиваетесь в данный момент. преимущество наличия значимых тестов.