Приложение Spring Boot не запускается, когда все компоненты помечены как ленивые, так как не удается найти канал ошибки - PullRequest
2 голосов
/ 08 ноября 2019

В Spring Boot 2.2 вы можете пометить все бины как ленивые по умолчанию.

Если я включу это через

spring.main.lazy-initialization=true

, я получаю следующеесообщение:

***************************
APPLICATION FAILED TO START
***************************

Description:

A component required a bean named 'errorChannel' that could not be found.

Код, который ссылается на это:

@MessagingGateway(errorChannel = "errorChannel")
@FunctionalInterface
public interface SomeInterface {

Похоже, что ленивый параметр остановил Spring Integration от создания errorChannel.

Как я могу пометить bean-компонент errorChannel как не ленивый здесь?

Также, как я могу исключить другие классы из-за того, что они не являются ленивыми по умолчанию в Spring Boot 2.2?

1 Ответ

1 голос
/ 08 ноября 2019

Ну, я получаю какое-то ленивое исключение в другом месте. Я предполагаю, что ваше приложение намного сложнее, чем вы говорите в вопросе.

В любом случае есть LazyInitializationExcludeFilter:

@Bean
public static LazyInitializationExcludeFilter integrationExcludeFilter() {
    return (beanName, beanDefinition, beanType) -> "testChannel".equals(beanName);
}

См. Его JavaDocs:

/**
 * Filter that can be used to exclude beans definitions from having their
 * {@link AbstractBeanDefinition#setLazyInit(boolean) lazy-init} set by the
 * {@link LazyInitializationBeanFactoryPostProcessor}.
 * <p>
 * Primarily intended to allow downstream projects to deal with edge-cases in which it is
 * not easy to support lazy-loading (such as in DSLs that dynamically create additional
 * beans). Adding an instance of this filter to the application context can be used for
 * these edge cases.
 * <p>
 * A typical example would be something like this:
 * <p>
 * <pre><code>
 * &#64;Bean
 * public static LazyInitializationExcludeFilter integrationLazyInitializationExcludeFilter() {
 *   return LazyInitializationExcludeFilter.forBeanTypes(IntegrationFlow.class);
 * }
*

* ПРИМЕЧАНИЕ: Бины этого типа будут созданы очень рано в жизненном цикле приложения *, поэтому они обычно должны объявляться как статические и не иметь никаких зависимостей. * * @author Тайлер Ван Гордер * @author Philip Webb * @since 2.2.0 * / @FunctionalInterface открытый интерфейс LazyInitializationExcludeFilter {

Я пока не знаю, как это исправить с точки зрения фреймворка. ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...