Действительно, кажется, у Flyway могут быть проблемы с OSGi.Возможно, вы можете указать им проблему и ваш пример.
Другая проблема с вашим примером - это то, что вы пытаетесь получить доступ к источнику данных через URL.Это не работает в OSGi.Причина в том, что этот путь должен иметь прямой доступ к классам драйверов базы данных.Это не работает в OSGi.
В OSGi доступ к базе данных осуществляется с помощью DataSourceFactory , которую драйвер базы данных создает как службу.На этой фабрике вы можете создать источник данных.
Поскольку не все драйверы баз данных предлагают эту услугу, существует pax-jdbc , который предоставляет фабрики для всех распространенных баз данных.Он также позволяет создавать источник данных, включая пулы, из конфигурации OSGi.
Ваш подход к миграции при запуске пакета - очень плохая идея.Методы в активаторе должны возвращаться быстро, и миграция базы данных может занять некоторое время.Конечно, вы хотите убедиться, что миграция происходит до того, как какой-либо пакет в системе получит доступ к базе данных.К счастью, есть способ подключиться к созданию DataSource для выполнения таких операций, как миграция.
См. Учебник liquibase , в котором также показана миграция базы данных.Он использует PreHook, предлагаемый pax-jdbc, который гарантирует, что ваш код миграции будет запущен до того, как DataSource передан любому другому пакету.