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

JAXB解组在作为jar/war运行的Spring Boot应用程序中非常缓慢

甄坚白
2023-03-14

由于我们所调用的是遗留API,我们需要用JAXB散集接收到的数据。

但在2周内,整个过程确实需要2-3倍的时间。此区域中的代码没有更改,依赖项相同,docker base image相同。

在我的本地开发环境中,我没有问题。这个问题在openshift中的服务器上是显而易见的。

我们所呼叫的endpoint的同事认为他们的性能指标没有差异。

这基本上是代码:

JAXBContext jaxbContext = jaxbContexts.get(ProductsResponse.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
ProductsResponse result = unmarshaller.unmarshal(new StringReader(xmlStr));

上下文被缓存和创建Unmarshaller应该是一个轻量级的操作,如这里所述JAXB创建上下文和封送器的成本。

...

我不知道是什么导致了这个问题。我们目前正在努力用JAXB注释支持的Jackson XMLMapper替换JAXB。但是由于API中的一些奇怪的结构,而这些结构不在我们手中,这会导致更多的问题。

商务人士越来越不耐烦了。我毫无头绪...

共有1个答案

南门欣怡
2023-03-14

我们找到了解决问题的方法。我想在这里与您分享解决方案。

当我使用java-jar从构建的war文件运行SpringBoot应用程序时,我可以重现这个问题。。。从我的本地windows计算机。破译者。解开玛莎花了大约20秒

在我看来,一些SAX或Xerces类是由WebappClassLoader加载的,它使用org。阿帕奇。卡塔琳娜。网络资源。隐藏物但不知何故,每个操作都会从war文件中加载这些类。

正如这里所描述的Tomcat8-org。阿帕奇。卡塔琳娜。网络资源。隐藏物getResource无法添加缓存可能太小的资源。

使用此代码,我将大小从10增加到100 mb

@Bean
public WebServerFactoryCustomizer prodTomcatCustomizer()
{
    return (WebServerFactoryCustomizer<TomcatServletWebServerFactory>) factory -> factory.addContextCustomizers(
      context -> {
          final int cacheSize = 100 * 1024;
          StandardRoot standardRoot = new StandardRoot(context);
          standardRoot.setCacheMaxSize(cacheSize);
          context.setResources(standardRoot);
      });
}

它解决了这个问题。我多年来看到的最佳图表:

无法100%确定问题的起因。也许其他一些开发只是导致缓存已满,这导致在每次解组操作时从war文件加载此类时出现巨大的性能问题。

我希望这能帮助一些人如何使用jaxb和Spring引导出现性能问题。

 类似资料:
  • 我试图在SpringMVC中运行SpringBoot应用程序,在SpringMVCPOM中添加SpringBoot应用程序依赖项,并扫描SpringBoot包,但我面临以下问题

  • 我们有一个连接到web服务的web应用程序。我们使用JAXB对soap请求和响应进行整理和解整理。因为我们使用的是JDK1.5,所以我们在WAR文件中包含了JAXB jar。我们能够在Tomcat上顺利运行它。然而,当我们在WAS7上部署它时,解组器突然无法工作。尽管我们没有从解组中收到任何异常/错误,但我们无法从结果bean中检索任何内容。解组后,bean的内容为null。请注意,JAXB封送器

  • 本文向大家介绍怎么将 SpringBoot web 应用程序部署为 JAR 或 WAR 文件?相关面试题,主要包含被问及怎么将 SpringBoot web 应用程序部署为 JAR 或 WAR 文件?时的应答技巧和注意事项,需要的朋友参考一下 通常,我们将 web 应用程序打包成 WAR 文件,然后将它部署到另外的服务器上。这样做使得我们能够在相同的服务器上处理多个项目。当 CPU 和内存有限的情

  • 该路径引用JRE的副本,我将用runnable.jar将其绑定到安装程序中 运行。bat文件会导致以下错误: 当我使用eclipse将应用程序导出为runnable.jar时,我选择“将所需的库打包到生成的JAR中”

  • 本文向大家介绍springboot打包jar和war包的教程图解,包括了springboot打包jar和war包的教程图解的使用技巧和注意事项,需要的朋友参考一下 Maven小白系列,我们会分为几个部分? 01 添加依赖并打包 02 添加本地jar包并打包 03 将本地jar包导入本地maven库 04 springboot打包jar和war 05 Maven统一版本管理 接下来,我们开始第四部分