Как избежать циклических ссылок при миграции Java Liquibase?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как избежать циклических ссылок при миграции Java Liquibase?

Сообщение Anonymous »

У меня есть приложение SpringBoot и код миграции Java Liquibase, который раньше работал, но теперь миграция не может быть выполнена из-за циклической ошибки зависимости.
LiquibaseConfig.java >

Код: Выделить всё

@Configuration(proxyBeanMethods = false)
@ConditionalOnMissingBean(SpringLiquibase.class)
@EnableConfigurationProperties({DataSourceProperties.class, LiquibaseProperties.class})
public class LiquibaseConfig extends LiquibaseAutoConfiguration.LiquibaseConfiguration {

public LiquibaseConfig(LiquibaseProperties properties, ApplicationContext applicationContext) {
super(properties);
SetDivisionToWidgetsMigrationTask.setApplicationContext(applicationContext);
}
}
Моя миграция SetDivisionToWidgetsMigrationTask.java

Код: Выделить всё

public class SetDivisionToWidgetsMigrationTask implements CustomTaskChange {

@Nullable
private static ApplicationContext applicationContext;

public static void setApplicationContext(ApplicationContext applicationContext) {
SetDivisionToWidgetsMigrationTask.applicationContext = applicationContext;
}

@Override
public void execute(Database database) throws CustomChangeException {
if (applicationContext == null) {
throw new ApplicationContextException("Application context is not assigned");
}
WidgetRepository widgetRepository = applicationContext.getBean(WidgetRepository.class);
DivisionRepository divisionRepository = applicationContext.getBean(DivisionRepository.class);
DivisionConverter divisionConverter = applicationContext.getBean(DivisionConverter.class);

Map widgetsByTenantId = widgetRepository.findAll()
.stream()
.collect(Collectors.groupingBy(Widget::getTenantId));

//method logic here
}

@Override
@Nullable
public String getConfirmationMessage() {
return null;

}

@Override
public void setUp() throws SetupException {
// empty method
}

@Override
public void setFileOpener(ResourceAccessor resourceAccessor) {
// empty method
}

@Override
@Nullable
public ValidationErrors validate(Database database) {
return null;
}
}
Ошибка возникает, когда я пытаюсь получить какой-либо компонент в методе, например: WidgetRepository widgetRepository = ApplicationContext.getBean(WidgetRepository.class);

Код: Выделить всё

┌─────┐
|  liquibase defined in class path resource [...config/LiquibaseConfig.class]
↑     ↓
|  widgetRepository defined in ...repository.WidgetRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration
↑     ↓
|  (inner bean)#3ba50851
↑     ↓
|  widgetRepositoryJdbcImplFragment
↑     ↓
|  widgetRepositoryJdbcImpl defined in file [..repository\jdbc\impl\WidgetRepositoryJdbcImpl.class]
└─────┘
Как это можно исправить?
Я пытался решить проблему через ChatGpt, но не получилось.

Подробнее здесь: https://stackoverflow.com/questions/787 ... -migration
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»