MarshallingWebServiceOutboundGateway 对第一个请求占用太多
MarshallingWebServiceOutboundGateway takes too much for the first request
我们有 很多 个我们用来连接的 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()
。在这里扫描所有包,并在 Jaxb2Marshaller
bean 中缓存一个完整的 JAXBContext
。
我们有 很多 个我们用来连接的 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()
。在这里扫描所有包,并在 Jaxb2Marshaller
bean 中缓存一个完整的 JAXBContext
。