MarshallingWebServiceOutboundGateway对于第一个请求占用太多时间



我们有很多用于连接的 soap 服务,每次第一个连接到同一服务需要花费大量时间才能从集成中启动,后续请求会快速缩短 60% 的响应时间。

对 JAXB 绑定初始化进行分析

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

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

一旦 Bean 初始化,它就可以快速处理少数请求。当服务流空闲一段时间并且请求再次开始流动时,MarshallingWebServiceOutboundGateway滞后非常糟糕。

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

任何输入都是值得赞赏的,可能在初始化中做错了事情。

谢谢

我不相信它会与界面上的@Configuration一起使用。因此,Jaxb2Marshaller@Bean是不可见的。

您需要考虑将@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缓存在Jaxb2Marshallerbean 中。

相关内容

  • 没有找到相关文章

最新更新