当前位置: 首页 > 知识库问答 >
问题:

带有Spring启动的WebServiceTemboard性能问题

竺和洽
2023-03-14

我正在使用WebServiceTemplate使用soap web服务,它在spring3中工作良好,性能良好。

spring :- 3.2.4.RELEASE
html" target="_blank">spring-ws-core :- 2.1.4.RELEASE
spring-ws-support :- 2.1.4.RELEASE
spring-ws-security :-2.1.4.RELEASE

调用肥皂服务的类

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();

@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 };
    }
}

性能结果计时--平均时间约为500ms,最长时间:-1秒

Spring防尘套1.5.20。发布和2.2.2。发布

使用spring boot时,相同的代码在没有任何更改的情况下第一次调用大约需要4秒,如果继续调用相同的代码,则第一次调用大约需要2秒

Spring防尘套的性能结果

第一次呼叫:-4秒

无间隔(1-10秒间隔)的后续调用:-2秒至800毫秒

它继续减少,同时保持一次又一次地以更少的间隔敲打相同的呼叫,并下降到Springmvc 3类似的结果,但如果在5分钟等间隔后再次尝试,则再次遵循相同的模式如果在5分钟后再次尝试,则第一次和进一步调用的结果相同。

注意:-对于spring boot,我也尝试了wss4j而不是wss4j2,还尝试了AxiomSoapMessageFactory,但没有成功

  • 我试过保持连接等,但仍然没有成功

共有2个答案

巫懿轩
2023-03-14

所以问题不在于代码。我最终在jboss Wildfly和bang上部署了它。。它刚开始表现得很好,没有任何变化。

现在它需要大约300毫秒到500毫秒。所以问题是嵌入式tomcat和嵌入式码头不好

梁宏才
2023-03-14

缓存可能是上述结果的因素之一

缓存是一种增强系统性能的机制。它是位于应用程序和持久数据库之间的临时内存。缓存内存存储最近使用的数据项,以尽可能减少数据库命中的次数。

JVM预热效果

启动基于JVM的应用程序时,它收到的第一个请求通常比平均响应时间慢得多。这种预热效应通常是由于类加载和启动时的字节码解释造成的。

要进一步优化应用程序,请使用Hypersistence优化器,它允许您通过扫描应用程序配置和映射,最大限度地利用JPA和Spring boot。

运行HyperSiteOptimizer非常简单,因为您只需将EntityManagerFactory实例传递给HyperSiteOptimizer对象构造函数,并调用init方法

我想您已经这样做了,但如果您还没有这样做,请查看更快的启动,并实施此处建议的修复。

对于禁用嵌入式tomcat的扫描,这里的注释中有一个建议tomcat JarScanning

在SpringBootApplication中启用异步调用

@EnableSync
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
 类似资料:
  • 问题内容: 我试图将Spring集成到具有数千个类的大型应用程序中,并且由于组件扫描,我在启动容器时遇到了巨大的延迟。 我已经将“基本软件包”中指定的目录数量缩小到最小,以减少扫描无关目录所浪费的时间,但是初始化的类路径扫描部分仍然需要大约1-2分钟。 那么,有没有一种方法可以优化扫描过程?我曾考虑过将候选类路径存储在文件中,然后使容器从文件中获取,而不是每次启动时都扫描类路径,但是我真的不知道从

  • 我有一个微服务-A,它从另一个微服务-B获得令牌作为标头。现在我想在微服务-A中实现swagger2。问题是每个请求都流经微服务-B。因此swagger-ui在本地as中引发错误 它不能获得微服务-B试图获取的那些报头参数。

  • 当我运行它时,它告诉我,,我在Eclipse上运行了它。你能给我一些主意吗?我是个新手,对这个问题很困惑。非常感谢。

  • 我正在使用elasticsearch7。5、我已打开以下属性 我已经生成了API密钥来将我们的springboot连接到elasticsearch。我正在使用 我的所有请求都来自“RestHighClient”,并且能够触发请求。唯一的问题是在服务器启动期间,它们是一些无法连接到Elasticsearch的错误。 在pom中。xml 在应用程序属性中: 有人能给我提个建议吗,我怎样才能解决它。

  • 我刚刚开始使用JPA(带有EclipseLink实现)。我有一个非常简单的选择查询,比如 (1) 实体管理器。查找(SomeEntity.class,SomeEntityPK);(2) 实体管理器。createQuery(“从某个实体x中选择x,其中x.isDefault=true”)。getResultList(); SomeEntity表中的记录数约为50(非常小的表)。 查询(1)最初需要3

  • 我尝试使用mockmvc,但它总是显示错误: 原因:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有可用的“org.springframework.test.web.servlet.MockMvc”类型的合格bean:预计至少有1个bean符合自动装配候选资格。依赖注释:{@org.springframework.