#java #spring-boot #integration-testing #h2 #in-memory-database
#java #весенняя загрузка #интеграция-тестирование #h2 #база данных в памяти
Вопрос:
В моем проекте мы используем oracle database в качестве основного приложения db и H2 в качестве базы данных в памяти для запуска только интеграционных тестов. Oracle db имеет множество функций, которые имеют структуру «schema.package.function()». Проблема в том, что я не могу воссоздать ту же функцию в H2 для тестовых случаев интеграции, поскольку H2 обрабатывает ее в форме «dbname.schemaname.functionname()».
например: когда код выполняется с oracle db, «ВЫБЕРИТЕ MDM.NEXT_KEYS.NEXT_REF_SOURCE_KEY из dual» работает. Во время тестирования интеграции на H2 выдает ошибку «DB MDM не найден». Поэтому я установил имя базы данных как MDM, а имя схемы как NEXT_KEYS в настройке h2.Это сработало. Но моя следующая функция ОПЛАЧИВАЕТСЯ.KEY_TRANSLATIONS.CORE_ENHANCED_DESC_4_KEY завершается с ошибкой, сообщающей, что «ПЛАТЕЛЬЩИКИ базы ДАННЫХ не найдены».
Изменение функций Oracle выходит за рамки уравнения, поскольку они используются несколькими командами.
Если это невозможно с H2, можете ли вы предложить хорошую альтернативную базу данных в памяти для spring boot
Ценю вашу помощь!
Комментарии:
1. База данных в памяти никогда не будет соответствовать стандартам, поддерживаемым полной СУБД. Вы используете Oracle, затем используйте Oracle в своих тестах. Используйте что-то вроде testcontainers для начальной загрузки базы данных Oracle для использования в ваших тестах.
Ответ №1:
Я смог устранить проблему. Добавление ссылки на решение здесь, чтобы это могло кому-то помочь
Установка этого флага IGNORE_CATALOGS=TRUE устранила проблему. Когда она включена, имя каталога (базы данных) игнорируется.
spring.datasource.url = jdbc:h2:mem:testdb;MODE = Oracle;IGNORE_CATALOGS=TRUE
Обратитесь к ссылке ниже https://github.com/h2database/h2database/issues/2893