MarshallingWebServiceOutboundGateway занимает слишком много для первого запроса - PullRequest
0 голосов
/ 08 октября 2018

У нас есть много мыльных сервисов, которые мы используем для подключения, и каждый раз, когда первому тому же сервису требуется много времени для инициации интеграции, а последующие запросы быстро сокращаются на 60% ответавремя.

Анализируется при инициализации привязок JAXB

@Configuration
public interface WSCommons {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
    @Bean
      static Jaxb2Marshaller jaxb2Marshaller() {
            marshaller.setPackagesToScan("com.abc");
        return marshaller;
      }
}

Это занимает значительное количество для первого запроса на сканирование каждой вещи и создание маршаллера.

Но,

Как только Бин инициализирован, он быстро работает для нескольких запросов.Когда поток службы в течение некоторого времени простаивает и запросы начинают выполняться снова, MarshallingWebServiceOutboundGateway очень плохо отстает.

Jaxb2Marshaller статичен, и в этом случае он должен отключиться для повторной инициализации.

Любой вклад приветствуется, возможно, что-то не так в инициализации.

Спасибо

1 Ответ

0 голосов
/ 08 октября 2018

Я не верю, что он будет работать с @Configuration на интерфейсе.Следовательно, ваш @Bean для Jaxb2Marshaller невидим.

Вам нужно рассмотреть возможность сделать свой @Configuration как class и удалить это static из определения бина.

У Jaxb2Marshaller есть опция, такая как:

/**
 * Set whether to lazily initialize the {@link JAXBContext} for this marshaller.
 * Default is {@code false} to initialize on startup; can be switched to {@code true}.
 * <p>Early initialization just applies if {@link #afterPropertiesSet()} is called.
 */
public void setLazyInit(boolean lazyInit) {

, которая по умолчанию false и, следовательно, afterPropertiesSet() вызывается во время нормальной фазы инициализации компонента.Все пакеты отсканированы здесь, и полностью обработанный JAXBContext кэшируется в компоненте Jaxb2Marshaller.

...