Spring boot spring引导出现WebServiceTemplate性能问题
我正在使用WebServiceTemplate使用soap web服务,它在spring3+中工作良好,性能良好Spring boot spring引导出现WebServiceTemplate性能问题,spring-boot,spring-3,webservicetemplate,spring-boot-2,Spring Boot,Spring 3,Webservicetemplate,Spring Boot 2,我正在使用WebServiceTemplate使用soap web服务,它在spring3+中工作良好,性能良好 spring :- 3.2.4.RELEASE spring-ws-core :- 2.1.4.RELEASE spring-ws-support :- 2.1.4.RELEASE spring-ws-security :-2.1.4.RELEASE 调用soap服务的类 SaajSoapMessageFactory messageFactory = new SaajSoapMes
spring :- 3.2.4.RELEASE
spring-ws-core :- 2.1.4.RELEASE
spring-ws-support :- 2.1.4.RELEASE
spring-ws-security :-2.1.4.RELEASE
调用soap服务的类
SaajSoapMessageFactory messageFactory = new SaajSoapMessageFactory(MessageFactory.newInstance());
messageFactory.afterPropertiesSet();
WebServiceTemplate webServiceTemplate = new WebServiceTemplate(messageFactory);
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setContextPath("some package");
marshaller.afterPropertiesSet();
webServiceTemplate.setMarshaller(marshaller);
webServiceTemplate.setUnmarshaller(marshaller);
webServiceTemplate.afterPropertiesSet();
webServiceTemplate.setInterceptors(clientInterceptors);
webServiceTemplate.setMessageSender(webServiceMessageSenderWithAuth);
webServiceTemplate.setDefaultUri(url);
Output result= ((JAXBElement<Output >) webServiceTemplate.marshalSendAndReceive(jaxbRequest)).getValue();
绩效结果
计时--大约500毫秒平均时间,最长时间:-1秒
弹簧护套1.5.20.释放和2.2.2.释放
使用spring boot时,相同的代码在没有任何更改的情况下第一次调用大约需要4秒,如果继续调用相同的代码,则第一次调用大约需要2秒
弹簧靴的性能结果
第一次呼叫:-4秒
无间隔的后续呼叫(间隔1-10秒):-2秒至800毫秒
它不断减少,同时以较少的间隔不断地重复相同的调用,并下降到类似spring mvc 3的结果,但如果在某个间隔(如5分钟)后再次尝试,则再次遵循相同的模式
如果在5分钟后再次尝试相同的方法,则第一次和以后的呼叫的结果相同
注意:-使用弹簧靴,我也尝试了wss4j,而不是wss4j2
也尝试了工厂但运气不佳
- 我试过保持联系等,但还是没有运气
EntityManagerFactory
实例传递给HyperSiteOptimizer
对象构造函数,然后调用init方法
我想您已经这样做了,但是如果您还没有,请查看并实施那里建议的修复
对于使用嵌入式tomcat禁用扫描,这里的评论中有一个建议
在SpringBootApplication中启用异步调用
所以问题不在于代码。我最终在jboss Wildfly和bang上部署了它。。 它刚开始表现得非常好,没有一行变化 现在大约需要300毫秒到500毫秒。因此,嵌入式tomcat和嵌入式jetty的问题不太好,因为在不首先预热JVM的情况下测量第一次调用延迟是没有意义的。
@Configuration
public class WebServiceConfiguration {
@Autowired
private SaajSoapMessageFactory messageFactory;
@Autowired
private WebServiceMessageSenderWithAuth webServiceMessageSenderWithAuth;
@Bean
public Wss4jSecurityInterceptor getWss4jSecurityInterceptor(@Value("${WSDL.UserName}") String userName,
@Value("${WSDL.Password}") String password) {
Wss4jSecurityInterceptor wss4jSecurityInterceptor = new Wss4jSecurityInterceptor();
wss4jSecurityInterceptor.setSecurementActions("UsernameToken");
wss4jSecurityInterceptor.setSecurementPasswordType("PasswordText");
wss4jSecurityInterceptor.setSecurementUsername(userName);
wss4jSecurityInterceptor.setSecurementPassword(password);
return wss4jSecurityInterceptor;
}
@Bean
public SaajSoapMessageFactory getSaajSoapMessageFactory() {
return new SaajSoapMessageFactory();
}
@Bean
public ClientInterceptor[] clientInterceptors(Wss4jSecurityInterceptor wsSecurityInterceptor) {
return new ClientInterceptor[] { wsSecurityInterceptor };
}
}
@EnableSync
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}