Flyway and Spring Boot
One minute read in JVM HighlightsДобавив jar файл с flyway-core в classpath приложения написанного на Spring Boot и не настроив миграции можно получить следующее исключение:
Caused by: org.flywaydb.core.api.FlywayException: Unable to determine URL for classpath location: db/migration (ClassLoader: sun.misc.Launcher$AppClassLoader@58644d46)
Добавление проперти flyway.enabled=false
в application.properties
решает проблему но! только при запуске приложения. К сожалению тесты не используют application.properties.
# application.properties
flyway.enabled=false
Быстрый поиск приводит нас например сюда: http://stackoverflow.com/questions/26210786/spring-boot-not-using-application-properties-in-tests, если вас не удовлетворил данный подход/решение то предлагаю пойти дальше и посмотреть мои конфигурационные файлы.
В данном проекте используется java configuration:
@ContextConfiguration(classes = { TestAppConfig.class })
@RunWith(SpringJUnit4ClassRunner.class)
// ... other annotations
public abstract class BaseSpringTest {
// ...
}
@Configuration
@Import({ AppConfig.class })
public class TestAppConfig {
// ...
}
@Configuration
@EnableAutoConfiguration(exclude = { FlywayAutoConfiguration.class })
@ComponentScan("by.ibragimov.rkeep")
public class AppConfig {
// ...
}
В общем-то логично, там где мы включаем авто-конфигурацию, там мы должны иметь возможность ее выключить. И напоследок пару полезных ссылок по теме.
Ссылки:
- Execute Flyway database migrations on startup
- Appendix A. Common application properties
- org.springframework.boot.autoconfigure.flyway.FlywayProperties.java
- Auto-configuration