Я бы хотел использовать две конфигурации Liquibase в текущем проекте. Конфигурация по умолчанию, которую я хотел бы использовать для DDL-изменений, и вторую для пользовательских вставок, где changelog будет в другом месте.Используйте настройки по умолчанию и пользовательские конфигурации Liquibase в приложении весенней загрузки
Если я настрою SpringLiquibase
, автоконфигурация по умолчанию будет пропущена из-за @ConditionalOnClass(SpringLiquibase.class)
аннотации в классе LiquibaseAutoConfiguration
. Как использовать автоконфигурацию по умолчанию + мой пользовательский? Можно ли каким-либо образом переписать аннотацию @ConditionalOnClass? Или, может быть, есть способ сказать Liquibase, что у меня есть другой журнал изменений вне приложения и запускать его, только если он присутствует?
Благодаря
редактировать:
Это может быть решение моей проблемы, но у меня есть проблема с загрузкой внешних файлов (файлы за пределами CLASSPATH), в LiquiBase.
@Configuration
@EnableConfigurationProperties(LiquibaseProperties.class)
public class LiquibaseConfiguration {
@Bean
SpringLiquibase liquibase(DataSource dataSource, LiquibaseProperties properties) {
SpringLiquibase liquibase = new SpringLiquibase();
liquibase.setChangeLog(properties.getChangeLog());
liquibase.setContexts(properties.getContexts());
liquibase.setDataSource(dataSource);
liquibase.setDefaultSchema(properties.getDefaultSchema());
liquibase.setDropFirst(properties.isDropFirst());
liquibase.setShouldRun(properties.isEnabled());
liquibase.setLabels(properties.getLabels());
liquibase.setChangeLogParameters(properties.getParameters());
liquibase.setRollbackFile(properties.getRollbackFile());
return liquibase;
}
@Bean
SpringLiquibase commandInitializerLiquibase(DataSource dataSource,
@Value("${docu.system.initializer.command.liquibase.changeLog}") String changeLogPath,
@Value("${docu.system.initializer.command.liquibase.contexts}") String contexts) {
File changeLog = new File(changeLogPath);
SpringLiquibase liquibase = new SpringLiquibase();
liquibase.setDataSource(dataSource);
liquibase.setContexts(contexts);
liquibase.setIgnoreClasspathPrefix(true);
liquibase.setChangeLog(changeLog.getAbsolutePath());
liquibase.setShouldRun(changeLog.exists());
//liquibase.setResourceLoader(liquibaseResourceLoader());
addPathToClassloader(changeLogPath);
return liquibase;
}
}
Включить тег не работает для меня, потому что может быть ситуация, когда весь журнал изменений не существует. Если бы был флаг failOnMissingFile, это могло бы помочь мне. Один журнал изменений, как я сказал, находится внутри приложения, в которое будут отправлены только DDL, а другой журнал изменений, который я хочу использовать для импорта данных, будет находиться вне приложения. – bilak
Да, в этом случае он не будет работать. Если ваша ситуация зависит от среды, вы можете рассмотреть использование профилей пружин для загрузки различных конфигурационных файлов журнала (один с включенным только DDL и другим с включенными как DDL, так и внешними данными) –
Проверьте мой расширенный ответ, надейтесь, что это поможет –