Multiple entries with same key: springfox.documentation.spring.web.plugins.PathAndParametersEquiv...

15 篇文章 0 订阅
9 篇文章 0 订阅

问题发现

springboot项目集成了swagger2,项目启动时,偶尔会出现这个问题,然而这是一个幽灵问题,并不是每次都会出现,复现这个问题需要运气,有时候可能会连续出现几次,有时候一周也不出现一次。

启动异常时,报错如下:

[2019-07-26 15:23:34] [main] [ERROR] [org.springframework.boot.SpringApplication:771] Application startup failed
org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.IllegalArgumentException: Multiple entries with same key: springfox.documentation.spring.web.plugins.PathAndParametersEquivalence@5dc9d25a.wrap(springfox.documentation.spring.web.WebMvcRequestHandler@686fb58a)=[springfox.documentation.spring.web.WebMvcRequestHandler@686fb58a] and springfox.documentation.spring.web.plugins.PathAndParametersEquivalence@5dc9d25a.wrap(springfox.documentation.spring.web.WebMvcRequestHandler@2c4be45f)=[springfox.documentation.spring.web.WebMvcRequestHandler@2c4be45f]
        at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:176)
        at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:50)
        at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:350)
        at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:149)
        at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:112)
        at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:880)
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:146)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:545)
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:124)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693)
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:303)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107)
        at com.test.abc.Application.main(Application.java:21)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
Caused by: java.lang.IllegalArgumentException: Multiple entries with same key: springfox.documentation.spring.web.plugins.PathAndParametersEquivalence@5dc9d25a.wrap(springfox.documentation.spring.web.WebMvcRequestHandler@686fb58a)=[springfox.documentation.spring.web.WebMvcRequestHandler@686fb58a] and springfox.documentation.spring.web.plugins.PathAndParametersEquivalence@5dc9d25a.wrap(springfox.documentation.spring.web.WebMvcRequestHandler@2c4be45f)=[springfox.documentation.spring.web.WebMvcRequestHandler@2c4be45f]
        at com.google.common.collect.ImmutableMap.checkNoConflict(ImmutableMap.java:150)
        at com.google.common.collect.RegularImmutableMap.checkNoConflictInBucket(RegularImmutableMap.java:104)
        at com.google.common.collect.RegularImmutableMap.<init>(RegularImmutableMap.java:70)
        at com.google.common.collect.ImmutableMap$Builder.build(ImmutableMap.java:254)
        at com.google.common.collect.ImmutableListMultimap.copyOf(ImmutableListMultimap.java:268)
        at com.google.common.collect.ImmutableMultimap.copyOf(ImmutableMultimap.java:298)
        at com.google.common.collect.ImmutableMultimap$Builder.build(ImmutableMultimap.java:272)
        at com.google.common.collect.ImmutableListMultimap$Builder.build(ImmutableListMultimap.java:224)
        at com.google.common.collect.Multimaps.index(Multimaps.java:1511)
        at com.google.common.collect.Multimaps.index(Multimaps.java:1455)
        at springfox.documentation.spring.web.plugins.DefaultRequestHandlerCombiner.combined(DefaultRequestHandlerCombiner.java:59)
        at springfox.documentation.spring.web.plugins.DefaultRequestHandlerCombiner.combine(DefaultRequestHandlerCombiner.java:49)
        at springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper.defaultContextBuilder(DocumentationPluginsBootstrapper.java:106)
        at springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper.buildContext(DocumentationPluginsBootstrapper.java:91)
        at springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper.start(DocumentationPluginsBootstrapper.java:154)
        at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:173)
        ... 22 common frames omitted

解决方案

因为是个幽灵问题,重启大法一般能解决问题,但是这个问题始终存在,重启并不是解决问题的方法。

搜索这个关键的PathAndParametersEquivalence类,发现是swagger相关的类,所以问有可能是swagger导致的,先是google了一下,然后在github找到了这个issue:Endpoints with the same path and parameters but different headers some times cause java.lang.IllegalArgumentException: Multiple entries with same key #2039,下面的讨论也十分精彩,而且也有人提到了是个幽灵问题,并且使用的swagger版本正是2.7.0,和我的情况一致,看到issue已经closed,我觉得问题马上能解决了:
在这里插入图片描述
作者先是发布了2.7.1-SNAPSHOT,但是很多人反映问题似乎并没有解决;有人指出了问题所在,作者在随后发布的2.8.0中修复了这个问题。

因此,直接将swagger升级到2.8.0+即可测底解决此问题,因为springboot使用的1.5.21.RELEASE版本,尝试过将swagger升级到2.9.2,但会报一些包冲突,不想解决就直接使用2.8.0了。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值