对于第一个请求,MarshallingWebServiceOutboundGateway花费太多

时间:2018-10-08 20:00:30

标签: spring-integration spring-integration-dsl spring-integration-http

我们拥有很多肥皂服务,我们可以使用它们连接到该服务,并且每次第一次使用同一服务都需要很长时间才能从集成中启动,随后的请求会迅速减少60%响应时间。

JAXB绑定初始化分析

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

对于扫描所有事物并创建编组器的第一个请求,这需要大量的时间。

但是

一旦Bean被初始化,它对几个请求的响应速度很快。当服务流闲置了一段时间并再次开始请求流时,MarshallingWebServiceOutboundGateway的确滞后。

Jaxb2Marshaller是静态的,在这种情况下,它应该死掉以重新初始化。

赞赏任何输入,可能在初始化中做错了事。

谢谢

1 个答案:

答案 0 :(得分:0)

我认为它不能与界面上的@Configuration一起使用。因此,您在@Bean上使用的Jaxb2Marshaller不可见。

您需要考虑将@Configuration设为class,并从bean定义中删除该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,因此在常规bean初始化阶段将调用afterPropertiesSet()。在此处扫描所有软件包,并在JAXBContext bean中缓存一个完整的Jaxb2Marshaller