我们拥有很多肥皂服务,我们可以使用它们连接到该服务,并且每次第一次使用同一服务都需要很长时间才能从集成中启动,随后的请求会迅速减少60%响应时间。
JAXB绑定初始化分析
@Configuration
public interface WSCommons {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
@Bean
static Jaxb2Marshaller jaxb2Marshaller() {
marshaller.setPackagesToScan("com.abc");
return marshaller;
}
}
对于扫描所有事物并创建编组器的第一个请求,这需要大量的时间。
但是
一旦Bean被初始化,它对几个请求的响应速度很快。当服务流闲置了一段时间并再次开始请求流时,MarshallingWebServiceOutboundGateway的确滞后。
Jaxb2Marshaller是静态的,在这种情况下,它应该死掉以重新初始化。
赞赏任何输入,可能在初始化中做错了事。
谢谢
答案 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
。