我们有很多用于连接的 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
缓存在Jaxb2Marshaller
bean 中。